我试图单击products.aspx中的链接,然后重定向到另一个页面category.aspx。当我在路由中使用{* id}处理product.aspx上的querystring时,链接无法正常工作。发送相同的product.aspx页。
我的路线:
routes.MapPageRoute("productsgroup", "products/{groupname}/{*id}", "~/products.aspx");
routes.MapPageRoute("productscat", "products/brand/{bname}", "~/categories.aspx");
products.aspx页面中的超链接:
<asp:Hyperlink ID="hyper_link" runat="server" NavigateUrl='<% GetRouteUrl("productscat", new {bname=Eval("brand-name").ToString()})%>' Text="Category1"></asp:Hyperlink>
[超链接位于asp:Repeater中,并且Eval()在链接上工作正常,并且链接似乎正常,当我单击超链接时,URL更改但未发送category.aspx页面。
如果我删除查询字符串{* id}而不使用超链接,则效果很好。
我试图了解为什么会发生这种情况以及我们可以采取什么措施。
有一个简单的解决方案。更改路线顺序,您的目标网址和链接将起作用。
routes.MapPageRoute("productscat", "products/brand/{bname}", "~/categories.aspx");
routes.MapPageRoute("productsgroup", "products/{groupname}/{*id}", "~/products.aspx");
Routing认为目标url是“ productsgroup”,因为它知道该URL,并且目标url就是这样开始的。路由等待变量和第二条路由,就像它不存在用于路由一样。
我希望它会有所帮助。干杯。