asp.net webforms routing:可选参数

时间:2010-09-23 17:41:34

标签: asp.net routing webforms

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

现在我创建了一条这样的路线:

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

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

有没有办法解决这个问题呢?为每个场景创建单独的路线?

感谢您的时间! 亲切的问候, 标记

3 个答案:

答案 0 :(得分:20)

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

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

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

因此,如果用户未指定类别,则此路线仍将被命中。我使用两个单独的路由时遇到的问题是我在我的站点周围设置了由路由名称生成的链接,并且您不能有两个具有相同名称的路由。

以下是来自MSDN的良好文档:here

答案 1 :(得分:6)

试试这个:

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

答案 2 :(得分:3)

我只是创建了单独的路线。

也就是说,您可以根据您定义的某个约定定义自定义RouteHandler,自动发送这些特殊情况,就好像您有不同的路径一样。

或者,您可以使用自定义RouteHandler和约定,以避免必须在路由中指定特定页面。这相当于asp.net MVC的作用。