我正在开发一个ASP.Net MVC 3 RC项目。我有一个名为Drivers的区域。我在Drivers区域的控制器中有一个LoadPartial()动作,它返回一个PartialView(字符串,对象);如果返回此信息,我的网页上会显示“未找到部分视图'PublicAttendanceCode'的错误。”它搜索了以下位置:
~/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 }
);
}
我错过了哪些内容会使其在驱动程序区域中显示部分内容?
答案 0 :(得分:2)
MVC视图引擎知道它们应该查看的区域的方式基于用于处理请求的 route 。
如果您拥有控制器操作,您是否确定该请求是由该区域的路由定义处理的,或者该请求是否可能由您在global.asax中定义的更一般的路由处理?
答案 1 :(得分:2)
您如何为PartialView()方法提供区域名称?我认为你应该将它作为routeValues参数传递给新的{area =“Drivers”}。
答案 2 :(得分:1)
方法PartialView
只有四次重载,似乎他们都不接受routeValues
作为参数。
我解决了这个问题:
return PartialView(
VirtualPathUtility.ToAbsolute("~/Areas/MyArea/Views/Shared/MyView.cshtml"));
它有效,但看起来很难看。
答案 3 :(得分:1)
这也有效:
return PartialView("~/Areas/Admin/Views/Shared/MyView.cshtml", model);