在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中定义的更一般路由处理的?
答
方法PartialView
只有4个过载,并且它们似乎都不接受routeValues
作为参数。
我解决了这个问题是这样的:
return PartialView(
VirtualPathUtility.ToAbsolute("~/Areas/MyArea/Views/Shared/MyView.cshtml"));
它的工作原理,但看起来丑陋。
答
这工作太:
return PartialView("~/Areas/Admin/Views/Shared/MyView.cshtml", model);
嗯,我猜它是用在Global.asax的路线,但因为它击中了DriverArea控制器,是不是应该对路线为寻找有好?如果不是,我该如何解决这个问题,以便它在司机区域寻找部分? – Deke 2010-11-26 19:57:09