剃刀视图引擎未搜索区域视图位置

5

我正在使用默认的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
2个回答

3
你确定在ApplicationAreaRegistration.cs中的RegisterRoutesTo()被调用了吗?似乎你的区域路由还没有注册。我建议将MapRoute移回到ApplicationAreaRegistration.cs中的RegisterArea覆盖方法中。

这正是问题所在。感谢您的帮助! - 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 可用的各种重载 - 你可能想要添加区域到 RouteValues 集合中。
`new {area="Application", applicationId = item.Id, action = "Details"}` 

当在区域之外使用RouteLink


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接