asp.net webforms routing:可选参数

问题描述:

我想在我的路由表中添加可选参数。 比如我想在用户浏览产品目录是这样的: http://www.domain.com/browse/by-category/electronics/1,2,3asp.net webforms routing:可选参数

现在我已经创造了这样的路线:

然而
  routes.MapPageRoute(
      "ProductsBrowse", 
      "browse/{BrowseBy}/{Category}", 
      "~/Pages/Products/Browse.aspx" 
     ); 

问题是,当用户输入http://www.domain.com/browse,我希望他们提出一个不同的页面,他们可以选择如何浏览的方式。所以参数{BrowseBy}和{Category}不会被使用。

有没有解决方法,然后为每个场景创建单独的路线?

谢谢你的时间! 亲切的问候, 马克

+0

请参阅我的回答它展示了如何用一个路由做到这一点。 – 2011-08-20 18:15:27

我只是创建单独的路线。

也就是说,你可以定义一个基于你定义的约定的自定义RouteHandler,自动发送这些特殊情况,就好像你有不同的路线。

或者,您可以使用自定义RouteHandler以及一个约定,以避免必须指定路径中的特定页面。这相当于asp.net MVC的功能。

我刚碰到这个问题,知道必须有办法做到这一点。有 -

MapPageRoute有一个重载,允许您指定默认值。这里有一个基于你的代码的例子用法:

routes.MapPageRoute(
     "ProductsBrowse", 
     "browse/{BrowseBy}/{Category}", 
     "~/Pages/Products/Browse.aspx", 
     false, 
     new RouteValueDictionary { { "Category", string.Empty } } 
    ); 

所以如果用户没有指定一个类别,这条路线仍然会被击中。我使用两条单​​独路由的问题是,我在我的站点周围设置了由路由名称生成的链接,并且不能有两个具有相同名称的路由。

这里有良好的文档从MSDN:here

试试这个:

routes.MapPageRoute(
      "ProductsBrowse", 
      "browse/{BrowseBy}/{Category}/{*queryvalues}", 
      "~/Pages/Products/Browse.aspx" 
     ); 
+0

感谢这个有用的提示。 – 2016-02-03 10:38:07