ASP.NET MVC忽略路由值

时间:2010-12-11 21:46:47

标签: c# .net asp.net-mvc

我有以下路由:{param1} / {param2} / {param3}我希望将它绑定到没有param1参数的动作(对它来说无关紧要)。如果我只是不在action方法中定义param1参数,ASP.NET MVC将不会选择路由。所以现在我必须在动作中定义param1参数,而不是使用它。

有没有办法忽略某些路由值而不必在动作方法中定义它们?

2 个答案:

答案 0 :(得分:0)

为什么不对参数进行重新排序以使其成为:

        routes.MapRoute(
            //// Route name
            "myNewRoute",
            //// URL with parameters
            "{param2}/{param3}/{param1}",
            //// Parameter defaults
            new { controller = "MyController", action = "MyActionName", param2 = string.Empty, param3 = string.Empty, param1 = string.Empty });

现在,如果只提供前两个参数,则需要param2和param3。 param1默认为string.empty。

如果你提供所有三个参数,那么param1,param2和param3都将具有值。

答案 1 :(得分:0)

第二种方法是使用2个MapRoutes。请注意,我在此处为路由添加了“自定义”,以确保路由引擎可以区分此路由和带有三个参数的路由,并且应该转到默认的asp mvc路由。

我还在Route2之前放置了Route1,因此路由引擎(如果它看到2个参数)更喜欢这条路由而不是Route2。如果您提供3个参数,路由将优先选择Route2而不是Route1或默认的mvc路由。

   routes.MapRoute(
        //// Route name
        "Route1",
        //// URL with parameters
        "Custom/{param2}/{param3}",
        //// Parameter defaults
        new { controller = "MyController", action = "MyActionName", param2 = string.Empty, param3 = string.Empty });


   routes.MapRoute(
        //// Route name
        "Route2",
        //// URL with parameters
        "Custom/{param1}/{param2}/{param3}",
        //// Parameter defaults
        new { controller = "MyController", action = "MyActionName", param2 = string.Empty, param3 = string.Empty, param1 = string.Empty });