MVC2 - 可以从不同的控制器调用动作吗?

时间:2011-06-30 14:51:37

标签: c# asp.net-mvc asp.net-mvc-2

在控制器中,是否可以从另一个控制器返回动作视图?另一个选项是返回一个局部视图,它使用Html.Action(...)从另一个控制器返回视图,但我想知道是否有更清洁的东西。感谢。

5 个答案:

答案 0 :(得分:4)

如果它只是您要重用的视图,则可以将路径传递给视图。例如:

public ActionResult MyAction()
{
   // do your model magic here
   return View( "~/Views/OtherController/View.aspx", model );
}

或者您可以像Kyle已经建议的那样将视图移至Views/Shared

答案 1 :(得分:1)

是的,如果该视图是共享视图。将视图放在MVC项目的Views/Shared文件夹中,然后两个控制器都能够返回它。

答案 2 :(得分:1)

如果要在另一个控制器上调用操作,可以使用Controller.RedirectToAction()并传入操作和控制器名称。

然而,这增加了额外的服务器往返。如果您想避免这种情况,可以使用此处显示的TransferResult类:

How to simulate Server.Transfer in ASP.NET MVC?

答案 3 :(得分:1)

我最终使用了原始解决方案,该解决方案具有调用操作的共享视图。它比我需要的代码少得多。感谢。

答案 4 :(得分:-1)

这是我用来调用另一个动作而不必为此目的创建特殊视图的策略:

创建一个共享视图,该视图采用定义Action,Controller和RouteValues的模型,其唯一责任是使用该模型上的值调用RenderAction。

接下来,在基类控制器类上创建一个辅助方法,该方法将Action,Controller和RouteValues作为参数,并返回此共享视图的ViewResult。这样,只要您想从其他操作的上下文中呈现其他一些操作,就可以在所有控制器上重用此辅助方法和共享视图。

当然,如果只是视图而不是你要调用的动作,Marnix的回答是正确的。