【问题标题】:MVC3 URL RoutingMVC3 URL 路由
【发布时间】:2013-06-02 14:01:53
【问题描述】:

我想创建一个以下列方式动态映射路线的网站:

http://domain/MyCategory1
http://domain/
http://domain/MyCategory1/MySubCategory

到目前为止,我已经在 Global.asax 中添加了一条新路由

routes.MapRoute(
"IFAMainCategory", // Route name
"{IFACategoryName}", // URL with parameters
new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults
);

但这会破坏标准的默认路由。

有什么办法可以控制吗?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing


    【解决方案1】:

    你需要改变你的路线:

     routes.MapRoute("MyCustomRoute", "MyCategory1/{action}/{id}",
         new { controller = "MyCategory1", action = "MySubCategory", id = UrlParameter.Optional });
    
    // Then the default route
    

    基本上,由于您刚刚制作了一条巨型路线捕手,所有路线都与那条路线相匹配。如果要将特定路由映射到控制器,则需要具体化。

    【讨论】:

      【解决方案2】:

      您需要在路由名称中包含 MyCategory1

      routes.MapRoute( "IFAMainCategory", 
      // Route name "MyCategory1/{IFACategoryName}", 
      // URL with parameters new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults );
      

      例如查看其他帖子,并查看 Route Debugger

      .NET MVC custom routing

      【讨论】:

        【解决方案3】:

        不幸的是,我不认为你会直接实现你想要的。

        您需要一些方法来分隔路线,例如将“类别”放在文件夹中:

        routes.MapRoute(
                        "IFAMainCategory", // Route name
                        "categories/{controller}/{action}/{id}", // URL with parameters
                        new { controller = "Home", action = "GetSubCategories", IFACategoryName=1 } 
                    );
        

        另一个选项是您可以在 App Start 上的默认路由之前为每个父类别注册一个路由:

        routes.MapRoute(
                        "IFAMainCategory 1", // Route name
                        "MyCategory1/{subcategory}", // URL with parameters
                        new { controller = "Home", action = "GetSubCategories", IFACategoryName=1, subcategory =  UrlParameter.Optional } 
                    );
        
        routes.MapRoute(
                        "IFAMainCategory 2", // Route name
                        "MyCategory2/{subcategory}", // URL with parameters
                        new { controller = "Home", action = "GetSubCategories", IFACategoryName=2, subcategory =  UrlParameter.Optional } 
                    );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-19
          • 1970-01-01
          • 2012-05-31
          • 2012-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-03
          相关资源
          最近更新 更多