新项目无法找到新区域的视图。
它正试图在父视图文件夹中找到它。
建议的解决方案是将.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容器中。但是,我不认为这会导致问题,因为它明确指出没有必要注册我的控制器。
答案 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)
我发现如果你的路线声明不高于"赶上所有"路由声明(通常是您指出的父视图),每次默认为父级。尝试将路线声明移到父母将尝试捕捉的任何内容上