asp.net webforms routing:可选参数

Mar*_*ark 13 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"
        );
Run Code Online (Sandbox Code Playgroud)

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

有没有办法围绕这个为每个场景创建单独的路线?

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

The*_*Man 20

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

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

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

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

这是来自MSDN的好文档:这里


Aza*_*rsa 6

试试这个:

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


egl*_*ius 3

我只是创建单独的路线。

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

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