Asp.net mvc MVC中的多个可选参数不起作用

Asp.net mvc MVC中的多个可选参数不起作用,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我的要求是为URL提供可选参数。URL应该类似于 我写了以下路线 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)

我的要求是为URL提供可选参数。URL应该类似于

  • 我写了以下
    路线

    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个url可以正常工作,但对于第二个url不起作用。没有必要这样做,您在第一种情况下已经这样做了:


    second route
    可以处理
    任意数量的参数

    您需要为以下每种组合定义一条路由

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

    请参阅

    我已删除其中一个,但对于第二种情况仍然不起作用。您应该检查您在任一路线中提供的约束代码,我认为约束失败,顺便说一句
    Default1
    路线已足够,不需要默认路由。你使用的是什么版本的MVC?这个错误在.NET4中修复了。5@MaxToro非常感谢。不确定OP使用的是哪个版本的MVC。我在MVC 3中遇到了这个问题。我找到了解决办法。@Krishnamean,解决办法是什么?