在MVC3区域中返回部分视图不在区域中搜索

问题描述:

我正在开发一个ASP.Net MVC 3 RC项目。我有一个名为Drivers的区域。我在驱动程序区域的控制器中有一个LoadPartial()动作,它返回一个PartialView(字符串,对象);当这个返回时,我的网页上出现错误提示“部分视图'PublicAttendanceCode'未找到。”它搜索以下位置:在MVC3区域中返回部分视图不在区域中搜索

~/Views/AttendanceEvent/PublicAttendanceCode.aspx 
~/Views/AttendanceEvent/PublicAttendanceCode.ascx 
~/Views/Shared/PublicAttendanceCode.aspx 
~/Views/Shared/PublicAttendanceCode.ascx 
~/Views/AttendanceEvent/PublicAttendanceCode.cshtml 
~/Views/AttendanceEvent/PublicAttendanceCode.vbhtml 
~/Views/Shared/PublicAttendanceCode.cshtml 
~/Views/Shared/PublicAttendanceCode.vbhtml 

为什么没有在驱动程序区域中搜索?

我在Global.asax.cs中下面的非常基本的路线:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", 
       action = "Index", 
       id = UrlParameter.Optional // Parameter defaults 
      } 
    ); 
} 

而且在DriversAreaRegistration.cs

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Drivers_default", 
     "Drivers/{controller}/{action}/{id}", 
     new { action = "RequestLeave", id = UrlParameter.Optional } 
    ); 
} 

我缺少什么,这将使它看起来在司机区域为偏?

你如何为PartialView()方法提供区域名称?我想你应该将它作为routeValues参数传递给新的{area =“Drivers”}。

MVC视图引擎知道它们应该看的区域的方式是基于用于处理请求的路由

如果您有控制器操作,您确定该请求是由该区域的路由定义处理的,还是有可能该请求是由您在global.asax中定义的更一般路由处理的?

+0

嗯,我猜它是用在Global.asax的路线,但因为它击中了DriverArea控制器,是不是应该对路线为寻找有好?如果不是,我该如何解决这个问题,以便它在司机区域寻找部分? – Deke 2010-11-26 19:57:09

方法PartialView只有4个过载,并且它们似乎都不接受routeValues作为参数。

我解决了这个问题是这样的:

return PartialView(
    VirtualPathUtility.ToAbsolute("~/Areas/MyArea/Views/Shared/MyView.cshtml")); 

它的工作原理,但看起来丑陋。

这工作太:

return PartialView("~/Areas/Admin/Views/Shared/MyView.cshtml", model);