路线映射不适用于“区域”

时间:2014-07-03 23:38:06

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor

我已经阅读了很多关于这个问题的内容,但我无法解决这个问题。

使用路由和ASP .NET MVC,一切都非常简单,但我仍然坚持这一点。

问题在于我尝试使用此表单对给定网址进行GET:

{面积} / {控制器} / {动作}

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

的意义上不起作用)

这是我的代码:

RouteConfig:

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 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}
            );
        }
    }

最后,这是我的global.asax(我确实调用了AreaRegistration.RegisterAllAreas()方法):

protected void Application_Start(){

   AreaRegistration.RegisterAllAreas();
   FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
   RouteConfig.RegisterRoutes(RouteTable.Routes);
   BundleConfig.RegisterBundles(BundleTable.Bundles);

}

我真的很感激这方面的一些建议,我想我已经花了足够的时间用谷歌搜索:O)

3 个答案:

答案 0 :(得分:2)

试试这个

RouteConfig:

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 { 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 }
      );
    }
  }

答案 1 :(得分:2)

默认路由无效的原因

因为您从未注册过默认的。在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}
            );
        }
    }
}

答案 2 :(得分:1)

This问题是帮助我的问题。

事情是,路线中的顺序'注册非常重要。考虑到这一点,我开始检查我的其他区域注册,我发现所有落入第一条规则的请求都是这样的一般规则:

routes.MapRoute(
    name : "Default",
    url  : {controller}{action}{id}
);

因此,在该规则之后,没有考虑任何规则。

感谢大家帮助,祝福!