如何在不同的控制器中管理MVC区域和RenderAction?

问题描述 投票:31回答:2

我刚刚在项目中添加了一个新的[[Admin区域,因为它开始变得很大,我想保持其结构化。

我有一个_ViewStart.cshtml视图,该视图将共享布局页面设置为包括菜单和带有一些用户信息的部分页面。由于未在我的区域页面上添加此内容,因此我也已将_ViewStart文件添加到我的区域。

此文件将布局设置为“〜/ Views / Shared / _Layout.cshtml”,这在我的“管理”区域之外。但是,_Layout文件包含

RenderAction()

方法,该方法调用控制器上的Child操作方法进行渲染。问题在于该区域似乎对该控制器没有可见性,因此引发以下异常:The controller for path '/Admin/LeadOrigin' was not found or does not implement IController.
虽然发生的位置在这里:

Line 70: <div id="logindisplay"> Line 71: @{ Line 72: Html.RenderAction("UserInfo", "Account"); Line 73: } Line 74: </div>

上面的RenderAction()正常工作,因为Account控制器在视图范围内,而在Admin区域中,似乎没有此控制器的范围。

任何想法如何解决这个问题?

asp.net-mvc razor asp.net-mvc-areas
2个回答
58
投票
您可以将区域指定为RouteValueDictionary(或只是路由值的对象)的一部分,在您的情况下RenderAction将其作为第三个参数:

Html.RenderAction("UserInfo", "Account", new { area = "" });

这是假设帐户控制器在根区域中。

0
投票
您可以使用

@ Html.Action通过传递参数值来呈现部分视图(如果需要)。

@Html.Action("ActionName", "ControolerName", new { firstParam = "a", SecondParam = "b",.... })
© www.soinside.com 2019 - 2024. All rights reserved.