在 ASP.NET MVC 中显示另一个控制器的视图
-
22-08-2019 - |
题
是否可以显示另一个控制器的视图?
比如说我有一个 CategoriesController
和一个 Category/NotFound.aspx
看法。当在 CategoriesController
, ,我可以轻松返回 View("NotFound")
.
现在说我有一个 ProductsController
以及添加产品的操作和视图。但是,此操作要求我们有一个类别来添加产品。例如, Products/Add/?catid=10
.
如果我无法找到基于的类别 catid
, ,我想展示 NotFound
从类别控制器查看而不是创建 CategoryNotFound
在产品控制器下查看。
这是可能的还是我以错误的方式构建事物?有没有好的方法可以做到这一点?
解决方案
是。默认情况下,ASP.NET MVC检查首先在\Views\[Controller_Dir]\
,但在那之后,如果它没有找到该视图,它\Views\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 的控制器或其他一些用户控件/页面。然后,在执行某些操作时,您可以从客户端代码调用某个地址,该地址将触发您的控制器并返回结果 超文本标记语言 格式化您的客户端代码可以采用此返回的结果,并将其放入您的页面中的任何位置...
使用此代码可以获取任何控制器:
var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext,
controller);