是否可以显示另一个控制器的视图?

比如说我有一个 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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top