2010-11-11 72 views
1

我正在開發一個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 } 
    ); 
} 

我缺少什麼,這將使它看起來在司機區域爲偏?

回答

2

你如何爲PartialView()方法提供區域名稱?我想你應該將它作爲routeValues參數傳遞給新的{area =「Drivers」}。

2

MVC視圖引擎知道它們應該看的區域的方式是基於用於處理請求的路由

如果您有控制器操作,您確定該請求是由該區域的路由定義處理的,還是有可能該請求是由您在global.asax中定義的更一般路由處理的?

+0

嗯,我猜它是用在Global.asax的路線,但因爲它擊中了DriverArea控制器,是不是應該對路線爲尋找有好?如果不是,我該如何解決這個問題,以便它在司機區域尋找部分? – Deke 2010-11-26 19:57:09

1

方法PartialView只有4個過載,並且它們似乎都不接受routeValues作爲參數。

我解決了這個問題是這樣的:

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

它的工作原理,但看起來醜陋。

1

這工作太:

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