Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.Net MVC 5中找不到区域视图_C#_.net_Asp.net Mvc 5_Asp.net Mvc Areas - Fatal编程技术网

C# 在ASP.Net MVC 5中找不到区域视图

C# 在ASP.Net MVC 5中找不到区域视图,c#,.net,asp.net-mvc-5,asp.net-mvc-areas,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", "Tes

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

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

建议的解决方案是将
.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容器中。不过,我认为这不会引起问题,因为它明确表示不需要注册我的控制器。

方法
注册区域
已经知道您位于名为
测试的区域。使用函数
DataTokens.Add(“区域”、“测试”)
声明第二次路由。这就是为什么会出现这个错误


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

我发现,如果您的路由声明不在“全部捕获”路由声明之上(通常是您指出的父视图),则每次都默认为父视图。尝试将路由声明移动到父级试图捕获的任何内容之上,这很可能是因为正在从命名空间搜索视图

YourNamespace.YourApplication.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" }
    );
}

向我们显示您的控制器操作。我已在上面进行了更新,以显示我的控制器中没有任何特殊功能。区域的路由声明是从Area Registration调用的,它在my global.asax.cs中的RouteConfig之前调用。
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" }
    );
}