269

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

比如说我有一个CategoriesController和一个Category/NotFound.aspx观点。而在中CategoriesController,我可以轻松返回View("NotFound")

现在说我有ProductsController一个动作和视图来添加一个产品。但是,此操作需要我们有一个类别来添加产品。例如,Products/Add/?catid=10

如果我找不到基于的类别catid,我想显示类别控制器中的视图,而不是在产品控制器下NotFound创建视图。CategoryNotFound

这是可能的还是我以错误的方式构建事物?有没有好的方法来做到这一点?

4

7 回答 7

310

是的。默认情况下,ASP.NET MVC 首先签入\Views\[Controller_Dir]\,但之后,如果找不到视图,它会签入\Views\Shared.

共享目录专门用于跨多个控制器共享视图。只需将您的视图添加到 Shared 子目录,您就可以开始了。

如果你这样做,return View("~/Views/Wherever/SomeDir/MyView.aspx")你可以返回任何你想要的视图。

于 2009-05-18T21:12:11.723 回答
170

您可以使用:

return View("../Category/NotFound", model);

它在 ASP.NET MVC 3 中进行了测试,但也应该在 ASP.NET MVC 2 中工作。

于 2010-12-05T11:33:14.183 回答
68

是的,有可能。返回这样的RedirectToAction()方法:

return RedirectToAction("ActionOrViewName", "ControllerName");
于 2014-08-28T07:57:01.447 回答
35

你试过RedirectToAction吗?

于 2012-02-24T17:41:27.087 回答
24

是的你可以。像这样返回一个动作:

return RedirectToAction("View", "Name of Controller");

一个例子:

return RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");

这种方法将调用 GET 方法

您也可以像这样将值传递给操作:

return RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" });
于 2015-04-16T02:44:04.993 回答
5

您还可以从JavaScript / jQuery调用任何控制器。假设您有一个控制器返回 404 或其他一些用户控件/页面。然后,在某些操作中,从您的客户端代码中,您可以调用某个地址,该地址将触发您的控制器并以HTML格式返回结果,您的客户端代码可以获取此返回的结果并将其放在页面中您想要的任何位置......

于 2009-05-20T14:43:03.343 回答
1

使用此代码,您可以获得任何控制器:

var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, 
controller);
于 2018-09-07T02:07:17.280 回答