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

jaf*_*ffa 32 asp.net-mvc asp.net-mvc-areas razor

我刚刚为我的项目添加了一个新的管理区域,因为它开始变得非常大,我想保持它的结构.

我有一个_ViewStart.cshtml视图,它设置一个共享布局页面,包括一个菜单和一个包含一些用户信息的部分.因为没有在我的区域页面上添加,我已经将_ViewStart文件添加到我的区域.

此文件将布局设置为"〜/ Views/Shared/_Layout.cshtml",它位于我的Admin区域之外.但是,_Layout文件包含一个RenderAction()方法,该方法在控制器上调用Child动作方法进行渲染.问题是该区域似乎没有此控制器的可见性,因此抛出以下异常:

The controller for path '/Admin/LeadOrigin' was not found or does not implement IController.
Run Code Online (Sandbox Code Playgroud)

它发生的地点在这里:

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

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

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

Ric*_*ton 59

您可以将区域指定为RouteValueDictionary(或路径值的对象)的一部分,RenderAction将其作为您案例中的第三个参数:

Html.RenderAction("UserInfo", "Account", new { area = "" });  
Run Code Online (Sandbox Code Playgroud)

这假设帐户控制器位于根区域.