0

我目前正在 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。
有人可以给我解释这个事实吗?
提前感谢您未来的帮助

4

2 回答 2

1

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

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

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

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

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

于 2012-01-18T11:52:26.250 回答
0

你可以这样做:

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

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

于 2012-01-18T11:17:09.883 回答