我有以下順序路由規則:我使用ASP.NET Web窗體路由歧義
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語句針對「精選」執行的案例值爲「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");
}
它應該只需要1個MapPageRoute調用,他們中的任何一個都可以。當你摸不清頭腦的時候,弄清楚如何完成剩下的工作可能會更容易一些。另一個提示:使用Glimpse來確定路由如何執行。 HTH – LosManos
Glimpse是否可以使用Web窗體?認爲這只是MVC ... – IrishChieftain
也許只有MVC是的;沒有想到這一點。 – LosManos