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

时间:2010-11-11 22:34:04

标签: partial-views asp.net-mvc-3

我正在开发一个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 }
    );
}

我错过了哪些内容会使其在驱动程序区域中显示部分内容?

4 个答案:

答案 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);