Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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# MVC 3区域线路不工作_C#_Asp.net Mvc_Asp.net Mvc 3_C# 4.0 - Fatal编程技术网

C# MVC 3区域线路不工作

C# MVC 3区域线路不工作,c#,asp.net-mvc,asp.net-mvc-3,c#-4.0,C#,Asp.net Mvc,Asp.net Mvc 3,C# 4.0,我在MVC3应用程序中创建了一个名为“Blog”的区域 在global.asax中,我有以下代码 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{co

我在MVC3应用程序中创建了一个名为“Blog”的区域

在global.asax中,我有以下代码

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

    }
这是我所在地区的代码

public class BlogAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get { return "Blog"; }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Blog_default",
            "Blog/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }
}
当我转到以下url时,我得到以下错误

找不到视图“索引”或其主视图,或者没有视图引擎支持搜索的位置。搜索了以下地点: ~/Views/blog/Index.aspx ~/Views/blog/Index.ascx ~/Views/Shared/Index.aspx ~/Views/Shared/Index.ascx ~/Views/blog/Index.cshtml ~/Views/blog/Index.vbhtml ~/Views/Shared/Index.cshtml ~/Views/Shared/Index.vbhtml

我该如何解决这个问题?

我正在使用Phil Haack的解决方案来解决这类问题。它方便地显示所有已注册的路由以及输入的URL如何与您的配置匹配

它通过覆盖常规应用程序流来工作,您可以通过在应用程序\u Start的末尾添加此行来启用该流程:

RouteDebug.RouteDebugger.RewriteRoutesForTesting( RouteTable.Routes );
从开始,您现在可以获取(或手动下载并安装)或提供此功能的软件包等


关于他的工具的状态以及它的变形,可以获得更多信息。这些评论也很适合阅读

>我发现在框架中,我认为是一个bug,用一个解决办法。如果您试图将默认路线映射到具有区域的MVC 3应用程序,则您的global.asax文件可能具有以下内容:

VB:

C#:

如果在URL中转到应用程序根目录,可能会出现如下运行时错误:

未找到视图“索引”或其主视图,或者没有视图引擎支持搜索的位置。搜索了以下位置:

由于某些原因,视图引擎在区域文件夹中查找视图文件的方式与键入整个链接的方式不同。奇怪的是代码到达了控制器动作。修复方法如下:将此代码放入控制器操作:

VB:

C#


您所在地区的注册似乎有误。可以为操作指定默认值,但不能为控制器指定默认值。由于您通常将Home作为控制器的名称,因此需要指定该名称

也可能是您的文件夹设置不正确,因为您应该进行物理设置:

  • /区域/博客
  • /区域/博客/控制器
  • /区域/博客/视图
。。。一旦你确定了你的博客区域路线,你还需要:


  • /区域/博客/视图/主页放松!这可以帮你节省几个小时的阅读时间,喝杯咖啡,看这3分钟的视频,一切都会变得清晰。(我相信它也适用于mvc3、mvc4和mvc2035)

    检查是否有虚拟路径映射为区域名称。我在VisualStudio中设置区域地址只是为了调试,它要求我创建一个虚拟路径。因此AppRelativeCurrentExecutionFilePath始终为~/并且路由无法确定区域。对于IIS express,请删除站点的虚拟路径:

    C:\Users\username\Documents\IISExpress\config\applicationhost.config
    

    我花了4天时间去发现它。

    我遇到了与Mindstorm Interactive相同的问题,并采取了稍微不同的方法。是的,它确实重定向了用户,但可以说,它使我的代码看起来不那么灵巧

    我创建了一个新的控制器,无论在哪个区域,因为问题是在渲染器中找不到视图,而不是控制器

    然后,控制器将该区域重定向(如Mindstroms fix中的键),瞧

    public class StartController : Controller
    {
      public ActionResult Index()
      {
        return RedirectToAction("Index", "MyController", new { area = "MyArea" });
      }
    }
    
    在RouteConfig中,只需添加

    routes.MapRoute(name: "Root", url: "", defaults: new { controller = "Start", action = "Index", area = "MyArea" });
    

    希望它能帮助到别人。

    只要试着从下面提到的目录中删除内容并重建项目即可

    C:\Temp C:\Users\%Username%\AppData\Local\Microsoft\VisualStudio C:\Windows\Microsoft.NET\Framework\v4.0.30319\临时ASP.NET文件 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET 文件路径\To\Your\Project\obj\Debug


    好的,我如何解决我的
    routes.MapRoute(默认值“,//路由名称“{controller}/{action}/{id}”,//带有参数的URL new{controller=“Home”,action=“Index”,id=urlparmeter.Optional}//Parameter defaults)路线首先查看区域路线是否由RoutedBugger显示。如果它们没有被调用,那么RegisterAllAreas就没有被调用或不工作。如果它们被列出了,但是像“/blog/ctrl/act”这样的url与您的博客区域路径不匹配,这是另一个问题。请注意,在我的区域注册中,我有“dataTokens:new{area=“blog”}”作为一个附加参数,尽管如果我没记错的话,这是MvcFutures的要求。如果这些东西不起作用,那么值得一试。@MortenMertner:我正在检查
    控制器上下文中的
    DatTokens
    属性。当我在根目录
    Controller
    中时,我发现
    DataToken的
    键计数=0。这是事实吗?这对于区域之间的布线也很有用。e、 g.ControllerContext.ParentActionViewContext…等等@MindstormInterface:我正在检查
    Controller Context
    属性中的
    DatTokens
    。当我在根目录
    Controller
    中时,我发现
    DataToken的
    键计数=0。这是事实吗?@PKKG是的,我刚刚测试了一下,得到了同样的结果。框架应提供全局asax的默认值。也许全局设置不正确,但在所有示例中都是这样,控制器中的修复程序也可以工作,所以我没有详细讨论它。我希望VS工具能够为我们创建它:-(新的{controller=“Home”,action=“Index”,id=UrlParameter.Optional}Hello@Peter:我在控制器上下文中检查DatTokens。当我在根目录控制器中时,我发现DataToken的密钥计数=0。这是事实吗?@PKKG-DataTokens是您在注册路由时指定的值,而不是来自URL。请尝试查看控制器上下文的RouteValues集合-这些值在路由中指定,并从URL匹配
      if (!this.ControllerContext.RouteData.DataTokens.ContainsKey("area"))
    {
            this.ControllerContext.RouteData.DataTokens.Add("area", "MyArea")
     }
    
    C:\Users\username\Documents\IISExpress\config\applicationhost.config
    
    public class StartController : Controller
    {
      public ActionResult Index()
      {
        return RedirectToAction("Index", "MyController", new { area = "MyArea" });
      }
    }
    
    routes.MapRoute(name: "Root", url: "", defaults: new { controller = "Start", action = "Index", area = "MyArea" });