在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格式返回结果,您的客户端代码可以将返回的结果放到您想要的页面中的任意位置。