MVC中的多个可选参数不起作用

时间:2014-03-19 13:30:43

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

我的要求是为网址提供可选参数。网址应该像。

  1. http://test.com/118939
  2. http://test.com/118939/test/2000/
  3. 我写了以下routes

    public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
                routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
    
                routes.MapRoute(
                    "FAQDefault",
                    "FAQ",
                    new { controller = "FAQ", action = "Default" });
                routes.MapRoute(null, "{id}", new { controller = "Home", action = "Default", id = UrlParameter.Optional });
                routes.MapRoute("rent", "{id}/{rent}/{unit}", new { controller = "Home", action = "Default", id = UrlParameter.Optional, rent = UrlParameter.Optional, unit = UrlParameter.Optional });
                routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Home", action = "Default", id = UrlParameter.Optional }, // Parameter defaults
                    new string[] { "CDCPortal" });
    
    
            }
    

    和控制器写成:

     public ActionResult Default(string id, string rent=null,string unit=null){}
    

    它可以正常使用1个网址但不适用于第二个网址。

2 个答案:

答案 0 :(得分:0)

没有必要像第一种情况那样做:

second route可以处理any number of parameters

答案 1 :(得分:0)

您需要为下面的每个组合定义路线

routes.MapRoute("Default-AllOptional", 
                "Default/{id}/{rent}/{unit}", 
                 new
                 {
                     controller = "Home",
                     action = "Default"
                     // nothing optional 
                 }
);

routes.MapRoute("Defaul-Id-rent-Optional", 
                "Default/{id}/{rent}", 
                 new
                 {
                     controller = "Home",
                     action = "Default",
                     id=UrlParameter.Optional,
                     rent=UrlParameter.Optional

                 }
);

参考Routing Regression With Two Consecutive Optional Url Parameters