【问题标题】:ASP .NET MVC 3 + Calling an HttpPost Action Method From a Different ControllerASP .NET MVC 3 + 从不同的控制器调用 HttpPost 操作方法
【发布时间】:2012-01-18 19:52:26
【问题描述】:

我目前正在 VS2010 下开发一个全 Web 应用程序,我正在使用 ASP .NET MVC 3 框架。

这是我的应用程序的简化概述:

  • 我已经实现了一个控制器 Ctrl1。
    • Ctrl1 包含一个 HttpGet 操作方法 ActMeth1。
      • Ctrl1Views 文件夹包含视图 View1。
  • 我已经实现了一个控制器 Ctrl2。
    • Ctrl2 包含一个 HttpPost 操作方法 ActMeth2。
      • ActMeth2 返回包含在 Ctrl2Views 文件夹中的视图 View2。
  • Ctrl1 和 Ctrl2 在同一个命名空间中。

我希望 ActMeth1 调用 ActMeth2 执行一些逻辑,然后返回 View2。

这里是 ActMeth1 的源代码:

public ActionResult ActMeth1()
{
    Ctrl2 myCtrl2 = new Ctrl2();
    return myCtrl2.ActMeth2();
}

不幸的是,ActMeth1 返回 View1。
有人可以给我解释一下这个事实吗?
提前感谢您未来的帮助

【问题讨论】:

    标签: asp.net-mvc-3 controller http-post actionmethod


    【解决方案1】:

    从长远来看,在另一个控制器的操作方法中实例化一个控制器的操作方法会带来麻烦。

    您可以使用临时数据,也可以通过 RedirectToAction 的路由字典传递数据。

    我认为你最好重新组织你的逻辑

    当您尝试在服务器端执行此逻辑时,

    一个。创建一个为两个控制器工作的服务 湾。使视图在两个控制器操作之间共享或为通用 html 创建部分视图 C。调用相应的服务方法并渲染共享视图

    【讨论】:

      【解决方案2】:

      你可以这样做:

      public ActionResult ActMeth1()
      {
          Ctrl2 myCtrl2 = new Ctrl2();
          myCtrl2.ActMeth2();
          return View("~/Views/Ctrl2Views/View2.cshtml");
      }
      

      我不确定您是否应该从控制器 1 内部实例化控制器 2...

      【讨论】:

      • ActMeth2 通过 ViewData 集合属性与 View2 共享数据。如果我应用你的提议,那么在 View2 的生成过程中 Ctrl2 共享的数据是不可用的。
      猜你喜欢
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 2012-08-15
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多