我有以下顺序的路由规则:
routes.MapPageRoute("Corporate", "Shop/{Category}", "~/Shop.aspx");
routes.MapPageRoute("GiftType", "Shop/{Category}", "~/Shop.aspx");
routes.MapPageRoute("Occasion", "Shop/{Category}", "~/Shop.aspx");
routes.MapPageRoute("Discounted", "Shop/{Category}", "~/Shop.aspx");
routes.MapPageRoute("Featured", "Shop/{Featured}", "~/Shop.aspx");
我正在使用的链接:
<a href="~/Shop/Corporate" title="Corporate Gifts" runat="server">Corporate</a>
<a href="~/Shop/GiftType" title="Shop by Gift Type" runat="server">Gift Type</a>
<a href="~/Shop/Occasion" title="Shop by Occasion" runat="server">Occasion</a>
<a href="~/Shop/Discounted" title="Discounted" runat="server">Discounted</a>
<a href='<%# "~/Shop/"+Eval("Featured") %>' title='<%# Eval("ProductName") %>'
runat="server">
在目标页面后面的代码中,以下代码有效,但我不知道为什么。switch语句针对“ Featured”的个案值为“ True”执行?就像我不是根据占位符将这些路由彼此区分开来吗?
if (Page.RouteData.Values["Category"] != null)
{
string category = Page.RouteData.Values["Category"].ToString();
switch (category)
{
case ("Corporate"):
Response.Write("Corporate");
break;
case ("GiftType"):
Response.Write("GiftType");
break;
case ("Occasion"):
Response.Write("Occasion");
break;
case ("Discounted"):
Response.Write("Discounted");
break;
// Do not want the following to be picked up here for Category param
case ("True"):
Response.Write("Featured");
break;
}
}
我想在代码方面工作是这样的:
if (Page.RouteData.Values["Category"] != null)
{
string category = Page.RouteData.Values["Category"].ToString();
switch (category)
{
case ("Corporate"):
Response.Write("Corporate");
break;
case ("GiftType"):
Response.Write("GiftType");
break;
case ("Occasion"):
Response.Write("Occasion");
break;
case ("Discounted"):
Response.Write("Discounted");
break;
}
}
else if (Page.RouteData.Values["Featured"].ToString() == "True")
{
Response.Write("Featured");
}
您的类别只需要一条路线:
routes.MapPageRoute("shop-categories", "Shop/{Category}", "~/Shop.aspx");
然后,您可以像以前一样构建URL
<a id="a1" href="<%$ RouteUrl:Category=Discounted,routename=shop-categories%>" title="Discounted" runat="server">Discounted</a>
我想您会希望采用其他路线(为清楚起见),例如
routes.MapPageRoute("featured", "Shop/Featured/{Featured}", "~/Shop.aspx");
和链接(双向):
<a id="A2" href="<%$ RouteUrl:Featured=False,routename=featured%>" title="Featured" runat="server">Featured False</a>
<a id="A3" href="~/Shop/Featured/True" title="Featured" runat="server">Featured True</a>
然后将您的代码隐藏:
if (Page.RouteData.Values["Category"] != null)
{
//something
}
else if (Page.RouteData.Values["Featured"] != null)
{
//something
}
建立像我所示的链接的好处是,如果您决定更改路线……您将不会中断任何事情。假设您最终不喜欢URL的外观,/Shop/Featured/
而只是希望它是/Featured/
,因此您更改了路由:
routes.MapPageRoute("featured", "Featured/{Featured}", "~/Shop.aspx");
现在在上面的示例中,与的链接id="A2"
仍然有效,而id="A3"
现在断开了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句