在ASP中显示来自另一个控制器的视图。NET MVC

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

例如,我有一个CategoriesController和一个Category/NotFound.aspx视图。而在CategoriesController中,我可以很容易地返回View("NotFound")

现在假设我有一个ProductsController和一个动作和视图来添加一个产品。但是,此操作要求我们有一个Category来将产品添加到其中。例如,Products/Add/?catid=10

如果我不能基于catid找到Category,我想从Categories控制器中显示NotFound视图,而不是在Products控制器下创建CategoryNotFound视图。

这是可能的还是我用错误的方式组织事情?有什么好办法吗?

302005 次浏览

是的。默认情况下,ASP。NET MVC首先检查\Views\[Controller_Dir]\,但在那之后,如果它没有找到视图,它检查\Views\Shared

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

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

你也可以从JavaScript/jQuery调用任何控制器。假设您有一个返回404或其他一些用户控件/页面的控制器。然后,在客户端代码的某些操作上,你可以调用一些地址,该地址将触发控制器并以超文本标记语言格式返回结果 你的客户端代码可以接受这个返回的结果,并把它放在你的页面的任何你想要的地方

你可以使用:

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

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

你试过RedirectToAction吗?

是的,这是可能的。 返回RedirectToAction()方法,如下所示:

return RedirectToAction("ActionOrViewName", "ControllerName");

是的,你可以。像这样返回一个Action:

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

一个例子:

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

这种方法将调用GET方法

你也可以像这样传递值给action:

return RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" });

使用这段代码,你可以获得任何控制器:

var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext,
controller);