2011-10-01 61 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"}` 

的区域之外