在控制器中,是否可以从另一个控制器返回动作视图?另一个选项是返回一个局部视图,它使用Html.Action(...)从另一个控制器返回视图,但我想知道是否有更清洁的东西。感谢。
答案 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类:
答案 3 :(得分:1)
我最终使用了原始解决方案,该解决方案具有调用操作的共享视图。它比我需要的代码少得多。感谢。
答案 4 :(得分:-1)
这是我用来调用另一个动作而不必为此目的创建特殊视图的策略:
创建一个共享视图,该视图采用定义Action,Controller和RouteValues的模型,其唯一责任是使用该模型上的值调用RenderAction。
接下来,在基类控制器类上创建一个辅助方法,该方法将Action,Controller和RouteValues作为参数,并返回此共享视图的ViewResult。这样,只要您想从其他操作的上下文中呈现其他一些操作,就可以在所有控制器上重用此辅助方法和共享视图。
当然,如果只是视图而不是你要调用的动作,Marnix的回答是正确的。