是否可以显示另一个控制器的视图?
比方说,我有一个CategoriesController
和一个Category/NotFound.aspx
视图。在CategoriesController
,我可以很容易地返回View("NotFound")
。
现在说我有一个ProductsController
和一个动作和视图来添加产品。但是,此操作要求我们有一个类别来添加产品。例如,Products/Add/?catid=10
。
如果我无法找到基于catid
的类别,我想从Categories控制器显示NotFound
视图,而不是在Products控制器下创建CategoryNotFound
视图。
这是可能的还是我以错误的方式构建事物?有没有办法做到这一点?
是。默认情况下,ASP.NET MVC首先在\Views\[Controller_Dir]\
中检查,但之后,如果它找不到视图,则会检入\Views\Shared
。
共享目录专门用于跨多个控制器共享视图。只需将您的View添加到Shared子目录,就可以了。
如果你做return View("~/Views/Wherever/SomeDir/MyView.aspx")
你可以返回任何你想要的视图。
您可以使用:
return View("../Category/NotFound", model);
它在ASP.NET MVC 3中进行了测试,但也应该在ASP.NET MVC 2中运行。
是的可能。像这样返回一个RedirectToAction()
方法:
return RedirectToAction("ActionOrViewName", "ControllerName");
你试过RedirectToAction
吗?
是的你可以。返回一个这样的动作:
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格式返回结果,您的客户端代码可以获取此返回的结果并将其放在您想要的页面中...
使用此代码,您可以获得任何控制器:
var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext,
controller);