C# 路线映射不适用于";面积“;

C# 路线映射不适用于";面积“;,c#,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Razor,我读了很多关于这个问题的书,但我想不出来 路由和ASP.NETMVC的一切都非常简单,但我还是坚持这一点 问题是,我试图使用以下表单访问给定的url: {area}/{controller}/{action} 但是{area}没有注册。我的默认路由也不起作用(不起作用,因为我需要转到localhost:port/Home,而不是只转到localhost:port)/ 这是我的代码: 路线图: public class RouteConfig { public static void Reg

我读了很多关于这个问题的书,但我想不出来

路由和ASP.NETMVC的一切都非常简单,但我还是坚持这一点

问题是,我试图使用以下表单访问给定的url:

{area}/{controller}/{action}

但是{area}没有注册。我的默认路由也不起作用(不起作用,因为我需要转到localhost:port/Home,而不是只转到localhost:port)/

这是我的代码:

路线图:

public class RouteConfig
{
   public static void RegisterRoute(RouteCollection routes)
   {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

      route.MapRoute(
         "Default",
         "{controller}/{action}",
         new {controller = "Home", action = "Index"}
      );
   }

}
public class RouteConfig
{
   public static void RegisterRoute(RouteCollection routes)
   {
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

     route.MapRoute(
     name: "Default",
     url: "{controller}/{action}/{id}",
     defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
   }
}
这是未注册的区域:

public class TransaccionesAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get{
            return “Transacciones”; 
        }
    }

    public override void RegisterArea(AreaRegistrationContext context){
        context.MapRoute(
            "Transacciones_default",
            "Transacciones/{controller}/{action}/{id}",
            new { controller = "Transacciones", action = "Index", id = UrlParameter.Option}
            );
        }
    }
  public class TransaccionesAreaRegistration : AreaRegistration
  {
    public override string AreaName
    {
      get{
          return “Transacciones”; 
      }
    }

  public override void RegisterArea(AreaRegistrationContext context){
    context.MapRoute(
        “Transacciones_default”,
        “Transacciones/{controller}/{action}/{id}”,
        new { action = ”Index”, id = UrlParameter.Optional },
        new string[] { "MyApp.Transacciones.Controllers" }  // specify the new namespace
       );
    }
}


    ------------------------------OR Try This--------------------------------

 public class RouteConfig
 {
   public static void RegisterRoute(RouteCollection routes)
   {
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
     AreaRegistration.RegisterAllAreas();

     route.MapRoute(
     name: "Default",
     url: "{controller}/{action}/{id}",
     defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
    }
  }
最后,这是我的global.asax(我确实调用AreaRegistration.Registeralareas()方法):

我真的很感激你给我一些建议,我想我已经花了足够的时间在谷歌上搜索了:O)

试试这个

路线图:

public class RouteConfig
{
   public static void RegisterRoute(RouteCollection routes)
   {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

      route.MapRoute(
         "Default",
         "{controller}/{action}",
         new {controller = "Home", action = "Index"}
      );
   }

}
public class RouteConfig
{
   public static void RegisterRoute(RouteCollection routes)
   {
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

     route.MapRoute(
     name: "Default",
     url: "{controller}/{action}/{id}",
     defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
   }
}
这是未注册的区域:

public class TransaccionesAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get{
            return “Transacciones”; 
        }
    }

    public override void RegisterArea(AreaRegistrationContext context){
        context.MapRoute(
            "Transacciones_default",
            "Transacciones/{controller}/{action}/{id}",
            new { controller = "Transacciones", action = "Index", id = UrlParameter.Option}
            );
        }
    }
  public class TransaccionesAreaRegistration : AreaRegistration
  {
    public override string AreaName
    {
      get{
          return “Transacciones”; 
      }
    }

  public override void RegisterArea(AreaRegistrationContext context){
    context.MapRoute(
        “Transacciones_default”,
        “Transacciones/{controller}/{action}/{id}”,
        new { action = ”Index”, id = UrlParameter.Optional },
        new string[] { "MyApp.Transacciones.Controllers" }  // specify the new namespace
       );
    }
}


    ------------------------------OR Try This--------------------------------

 public class RouteConfig
 {
   public static void RegisterRoute(RouteCollection routes)
   {
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
     AreaRegistration.RegisterAllAreas();

     route.MapRoute(
     name: "Default",
     url: "{controller}/{action}/{id}",
     defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
    }
  }
试试这个

路线图:

public class RouteConfig
{
   public static void RegisterRoute(RouteCollection routes)
   {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

      route.MapRoute(
         "Default",
         "{controller}/{action}",
         new {controller = "Home", action = "Index"}
      );
   }

}
public class RouteConfig
{
   public static void RegisterRoute(RouteCollection routes)
   {
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

     route.MapRoute(
     name: "Default",
     url: "{controller}/{action}/{id}",
     defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
   }
}
这是未注册的区域:

public class TransaccionesAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get{
            return “Transacciones”; 
        }
    }

    public override void RegisterArea(AreaRegistrationContext context){
        context.MapRoute(
            "Transacciones_default",
            "Transacciones/{controller}/{action}/{id}",
            new { controller = "Transacciones", action = "Index", id = UrlParameter.Option}
            );
        }
    }
  public class TransaccionesAreaRegistration : AreaRegistration
  {
    public override string AreaName
    {
      get{
          return “Transacciones”; 
      }
    }

  public override void RegisterArea(AreaRegistrationContext context){
    context.MapRoute(
        “Transacciones_default”,
        “Transacciones/{controller}/{action}/{id}”,
        new { action = ”Index”, id = UrlParameter.Optional },
        new string[] { "MyApp.Transacciones.Controllers" }  // specify the new namespace
       );
    }
}


    ------------------------------OR Try This--------------------------------

 public class RouteConfig
 {
   public static void RegisterRoute(RouteCollection routes)
   {
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
     AreaRegistration.RegisterAllAreas();

     route.MapRoute(
     name: "Default",
     url: "{controller}/{action}/{id}",
     defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
    }
  }

默认路由不工作的原因

因为你从来没有注册过默认的。将此行添加到
RouteConfig
-

routes.MapRoute("Home", "", new { Controller = "Home", Action = "Index" });
所以最后的代码应该是这样的-

public class RouteConfig
{
   public static void RegisterRoute(RouteCollection routes)
   {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

      routes.MapRoute("Home", "", new { Controller = "Home", Action = "Index" });

      route.MapRoute(
         "Default",
         "{controller}/{action}",
         new {controller = "Home", action = "Index"}
      );
   }
}
区域似乎不工作的可能原因

可能也是同样的原因,区域注册似乎不起作用。尝试在区域注册中添加以下行-

routes.MapRoute("Transacciones_Home", "Transacciones", new { Controller = "Transacciones", Action = "Index" });
所以看起来像——

public class TransaccionesAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get{
            return “Transacciones”; 
        }
    }

    public override void RegisterArea(AreaRegistrationContext context){
        routes.MapRoute("Transacciones_Home", "Transacciones", new { Controller = "Transacciones", Action = "Index" });

        context.MapRoute(
            “Transacciones_default”,
            “Transacciones/{controller}/{action}/{id}”,
            new { controller = “Transacciones”, action = ”Index”, id = UrlParameter.Option}
            );
        }
    }
}

默认路由不工作的原因

因为你从来没有注册过默认的。将此行添加到
RouteConfig
-

routes.MapRoute("Home", "", new { Controller = "Home", Action = "Index" });
所以最后的代码应该是这样的-

public class RouteConfig
{
   public static void RegisterRoute(RouteCollection routes)
   {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

      routes.MapRoute("Home", "", new { Controller = "Home", Action = "Index" });

      route.MapRoute(
         "Default",
         "{controller}/{action}",
         new {controller = "Home", action = "Index"}
      );
   }
}
区域似乎不工作的可能原因

可能也是同样的原因,区域注册似乎不起作用。尝试在区域注册中添加以下行-

routes.MapRoute("Transacciones_Home", "Transacciones", new { Controller = "Transacciones", Action = "Index" });
所以看起来像——

public class TransaccionesAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get{
            return “Transacciones”; 
        }
    }

    public override void RegisterArea(AreaRegistrationContext context){
        routes.MapRoute("Transacciones_Home", "Transacciones", new { Controller = "Transacciones", Action = "Index" });

        context.MapRoute(
            “Transacciones_default”,
            “Transacciones/{controller}/{action}/{id}”,
            new { controller = “Transacciones”, action = ”Index”, id = UrlParameter.Option}
            );
        }
    }
}
这些问题对我很有帮助

问题是,路线登记的顺序非常重要。考虑到这一点,我开始检查我的其他区域注册,我发现所有的请求都属于第一条规则,这是一条一般规则,如下所示:

routes.MapRoute(
    name : "Default",
    url  : {controller}{action}{id}
);
因此,在该规则之后,没有任何规则被考虑

谢谢大家的帮助,贝斯特

这些问题对我很有帮助

问题是,路线登记的顺序非常重要。考虑到这一点,我开始检查我的其他区域注册,我发现所有的请求都属于第一条规则,这是一条一般规则,如下所示:

routes.MapRoute(
    name : "Default",
    url  : {controller}{action}{id}
);
因此,在该规则之后,没有任何规则被考虑


谢谢大家的帮助,贝斯特

“不工作”是指您找不到
404
?是的,先生。让我把最新情况说清楚。谢谢@haim770“不工作”您的意思是您找不到
404
?是的,先生。让我把最新情况说清楚。谢谢@haim770Thanche@ActiveHigh,我明天会试试这个,如果有用的话会告诉你。我想你在“TransaccionesAreaRegistration”课程中指的是“上下文…”而不是“路线…”。谢谢@ActiveHigh,我明天会试试这个,告诉你它是否有效。不起作用。我想你在“TransaccionesAreaRegistration”课程中的意思是“上下文…”而不是“路线…”。谢谢你的快速回答,但这仍然不起作用。我试过这两种方法谢谢你的快速回答,但这仍然不起作用。我两个都试过了