2010-12-11 244 views
0

我有以下路由:{param1}/{param2}/{param3}并且我想将它绑定到没有param1参数的操作(它对它并不重要)。如果我只是不在action方法中定义param1参数,则ASP.NET MVC不会选择路由。所以现在我必须在动作中定义param1参数,而不是使用它。ASP.NET MVC忽略路由值

有什么办法可以忽略一些路径值,不必在动作方法中定义它们吗?

回答

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

现在,如果你只提供前两个参数,它需要参数2和参数3。 param1默认为string.empty。

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

+0

给出我提供的两个答案,我更喜欢这个,因为它的简单性。 – MedicineMan 2010-12-11 23:41:59

0

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

我还在Route2之前放置了Route1,因此路由引擎(如果它看到2个参数)将优先于Route2上的此路由。如果您提供3个参数,则路由将优先于Route1而不是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 });