【问题标题】:Why does @Url.Action not output Index when you specify Index as the action?为什么将 Index 指定为操作时,@Url.Action 不输出 Index?
【发布时间】:2017-04-10 01:21:11
【问题描述】:

为什么@Url.Action 指定Index为action时不输出Index?

我正在尝试使用 razor @Url.Action("Index", "Admin") 输出 URL,但输出为 http://localhost/Admin。结果路由认为/Admin是一个类别,被错误的路由抓到了。

我使用的路线是

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


        routes.MapRoute(
            null,
            "Page{page}",
            new { Controller = "Photo", action="List" , category = (string)null },
            new { page = @"\d+" }
        );


        routes.MapRoute(
            null,
            "{category}",
            new { Controller = "Photo", action = "List", page=1 }
        );


        routes.MapRoute(
            null,
            "{category}/Page{page}",
            new { Controller = "Photo", action = "List"},
            new { page = @"\d+" }
        );


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

        routes.MapRoute(null, "{controller}/{action}");
    }

【问题讨论】:

    标签: asp.net-mvc routing


    【解决方案1】:

    这是因为你的默认路由

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

    创建action url 时,它将看到您的default 路由,因此您的路由将是Admin/{action},因为您的操作与default 操作相同,因此它将忽略将其写入url,如果您仍想显示index 将您的路线顺序更改为

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

    【讨论】:

      【解决方案2】:

      我通过添加两条新路线解决了这个问题。

      public static void RegisterRoutes(RouteCollection routes)
          {
              routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
      
      
              routes.MapRoute(
                  "AdminIndex",                                           // Route name
                  "Admin",                            // URL with parameters
                  new { controller = "Admin", action = "Index" }  // Parameter defaults
              );
              routes.MapRoute(
                  "Admin",                                           // Route name
                  "Admin/Page{page}",                            // URL with parameters
                  new { controller = "Admin", action = "Index" }  // Parameter defaults
              );
      
      
              routes.MapRoute(
                  null,
                  "Page{page}",
                  new { Controller = "Photo", action="List" , category = (string)null },
                  new { page = @"\d+" }
              );
      
              routes.MapRoute(
                  null,
                  "{category}",
                  new { Controller = "Photo", action = "List", page=1 }
              );
      
      
              routes.MapRoute(
                  null,
                  "{category}/Page{page}",
                  new { Controller = "Photo", action = "List"},
                  new { page = @"\d+" }
              );
      
      
              //Default MVC route(fallback)
              routes.MapRoute(
                  "Default", // Route name
                  "{controller}/{action}/{id}", // URL with parameters
                  new { controller = "App", action = "Index", id = UrlParameter.Optional } // Parameter defaults
              );
      
              routes.MapRoute(null, "{controller}/{action}");
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-14
        • 2012-07-27
        • 2012-02-29
        • 1970-01-01
        相关资源
        最近更新 更多