2011-10-01 60 views
4

我使用默認的RazorViewEngine和區域佈局配置,但是當我導航到使用該區域內的視圖的鏈接時。我得到一個錯誤,指出該視圖不能被發現和搜查在以下位置:剃刀視圖引擎不搜索區域查看位置

~/Views/Applications/Details.cshtml 
~/Views/Applications/Details.vbhtml 
~/Views/Shared/Details.cshtml 
~/Views/Shared/Details.vbhtml 

我感到奇怪的是,它看起來好像視圖引擎不會嘗試搜索的區域位置。我需要做些什麼調整才能讓視圖引擎在其區域中搜索視圖。

這是我用來定義我的區域的相關代碼。

的Global.asax.cs

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    RouteRegistrar.RegisterRoutesTo(RouteTable.Routes); 
} 

ApplicationAreaRegistration.cs

private void RegisterRoutesTo(RouteCollection routes) 
{ 
     routes.MapRoute("Application_default", AreaName + "/{action}/{applicationId}", 
         new 
         { 
          controller = "Applications", 
          action = "Index",         
          applicationDomainId = UrlParameter.Optional 
         }, new { applicationId = @"\d+" }); 
} 

Index.cshtml

@Html.RouteLink(item.Name, "Application_default", new { applicationId = item.Id, action = "Details" }) 

物理目錄佈局

Areas \ 
     \Application 
        \Controllers 
           -ApplicationsController.cs 
        \Views 
         -Details.cshtml 
     -ApplicationAreaRegistration.cs 

回答

3

您確定ApplicationAreaRegistration.cs中的RegisterRoutesTo()正在被調用嗎?看來您所在地區的路線尚未註冊。

我建議將您的MapRoute移回RegisterArea的覆蓋ApplicationAreaRegistration.cs

+0

這正是問題所在。謝謝您的幫助! – Karl

0

MapRoute似乎是一個問題。嘗試添加area聲明

routes.MapRoute("Application_default", 
       AreaName + "/{action}/{applicationId}", 
       new 
       { 
        area= "Application", 
        controller = "Applications", 
        action = "Index",         
        applicationDomainId = UrlParameter.Optional 
       }, 
       new { applicationId = @"\d+" }); 

而且,只是仔細檢查可用的各種重載Html.RouteLink - 你可能想使用RouteLink時添加該地區RouteValues收集

`new {area="Application", applicationId = item.Id, action = "Details"}` 

的區域之外