在ASP.NET MVC中显示来自另一个控制器的视图
是否有可能显示从另一个控制器的视图?
说例如我有一个CategoriesController
和一个Category/NotFound.aspx
视图。 在CategoriesController
,我可以很容易地返回View("NotFound")
。
现在说我有一个ProductsController
和一个动作和视图来添加一个产品。 但是,此操作要求我们有一个类别来添加产品。 例如, Products/Add/?catid=10
。
如果我无法find基于catid
的类别,我想从类别控制器显示NotFound
视图,而不是在Products控制器下创build一个CategoryNotFound
视图。
这是可能的还是我以错误的方式构造事物? 有没有一个好的方法来做到这一点?
是。 默认情况下,ASP.NET MVC首先在\Views\[Controller_Dir]\
,但在此之后,如果未find该视图,则会检查\Views\Shared
。
共享目录是专门用于跨多个控制器共享视图。 只需将您的视图添加到共享子目录,你很好去。
如果你确实return View("~/Views/Wherever/SomeDir/MyView.aspx")
你可以返回任何你想要的View。
您可以使用:
return View("../Category/NotFound", model);
它在ASP.NET MVC 3中进行了testing,但也应该在ASP.NET MVC 2中工作。
你有没有尝试RedirectToAction
?
是的,可能的。 像这样返回一个RedirectToAction()
方法:
return RedirectToAction("ActionOrViewName", "ControllerName");
是的你可以。 返回一个这样的动作:
return RedirectToAction("View", "Name of Controller");
一个例子:
RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");
这种方法将调用GET方法
你也可以通过这样的值来传递值:
RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );
您也可以从JavaScript / jQuery调用任何控制器。 假设你有一个控制器返回404或其他一些用户控件/页面。 然后,通过一些操作,从客户端代码中,您可以调用一些地址来启动您的控制器,并以HTML格式返回结果,您的客户端代码可以将返回的结果放到您想要的页面中的任意位置。