无法在ASP.Net MVC 5中找到区域视图

时间:2014-05-17 22:19:00

标签: c# .net asp.net-mvc-5 asp.net-mvc-areas

新项目无法找到新区域的视图。

它正试图在父视图文件夹中找到它。

建议的解决方案是将.DataTokens.Add("area", "AREANAME")放入RegisterArea方法。

public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Test_default",
                "Test/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            ).DataTokens.Add("area", "Test");
        }

然而,有了这个,我得到一个“一个具有相同密钥的项目已经添加。”错误。

更新1:我没有对控制器做任何想法。

public ActionResult Index()
        {
            return View();
        }

更新2:我只想补充一点,我也在将组件注册到Unity容器中。但是,我不认为这会导致问题,因为它明确指出没有必要注册我的控制器。

3 个答案:

答案 0 :(得分:5)

这很可能是因为正在从命名空间

中搜索视图
YourNamespace.YourApplication.Controllers 

而应该从命名空间(或你定义的名称空间)中查找

YourNamespace.YourApplication.Areas.Test.Controllers

在路线声明中添加以下内容

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "Test_default",
        "Test/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional },
        namespaces: new[] { "YourNamespace.YourApplication.Areas.Test.Controllers" }
    );
}

答案 1 :(得分:1)

方法Register Area已知道您所在的区域名为Test。使用函数DataTokens.Add("area", "Test")第二次声明您的路线。这就是你得到这个错误的原因。

视图的初始问题肯定与您的路由设置无关。从控制器渲染视图时是否有自定义代码?

答案 2 :(得分:1)

我发现如果你的路线声明不高于"赶上所有"路由声明(通常是您指出的父视图),每次默认为父级。尝试将路线声明移到父母将尝试捕捉的任何内容上