首页 > 解决方案 > 如果有,我如何使用第二个路由数据值

问题描述

我正在使用带有一个变量的 asp.net 路由没有问题,但我想使用两个变量,第二个变量不是必须的。它可以是,也可以不是。

想使用路线:

products/{a}/{id}
services/{b}/{id}

在这种情况下,我必须输入“a”变量和“id”变量才能到达 url。但是如果没有 {id} 变量,我想打开 url,例如:

products/{a}
services/{b}

如果我在路由中从 url 中删除 {id},则上面的 url 工作正常。

我尝试添加 {*id} 并打开,但在您打开页面时会发生冲突。我用 {id?} 找到了一个解决方案,但会导致路由错误。有什么建议吗?

我的解决方案:

我添加了一条新路线来解决这个问题。这不是最好的,但工作。如果您有相同路线的更好解决方案,请与我们分享。

routes.MapPageRoute("Products", "products/{a}", "~/products.aspx");
routes.MapPageRoute("Services", "services/{b}", "~/services.aspx");
routes.MapPageRoute("Productsid", "products/{a}/{id}", "~/products.aspx");
routes.MapPageRoute("Servicesid", "services/{b}/{id}", "~/services.aspx");

标签: c#asp.netroutingurl-routingquery-string

解决方案


也许您可以通过添加规则使您的 {id} 参数可选:

    routes.MapPageRoute(
       routeName: "Products",
       routeUrl: "products/{a}/{id}",
       physicalFile: "~/products.aspx",
       checkPhysicalUrlAccess: true,
       defaults: new RouteValueDictionary(new {
       id = UrlParameter.Optional,
    });

这里有更多内容可以帮助您更多地了解您的想法。


推荐阅读