[英]ASP.Net Routing in asp.net web-forms
我正在為我的網站使用ASP.Net Web表單路由,但我想使其更具結構性並使用適當的結構(如Language/Category/PageName-Title
示例)隱藏所有Querystring ID,例如: www.abc.com/en/sports/cricket-world-cup
但是使用我目前的路由技術,我可以使其工作
www.abc.com/en/1/13/cricket-world-cup
domain/english-folder/language-id/page-id/page-title
我如何使其結構更像`www.abc.com/en/sports/cricket-world-cup
由於我查詢字符串很少,所以我以此方式設計
//For Page.aspx
routes.MapPageRoute("Page_Route", "en/page/{LID}/{PID}/{PageName}", "~/en/Page.aspx", false,
new RouteValueDictionary {
{ "LID", "0"},
{ "PID", "0" },
{ "PageName", "Page-not-found" }},
new RouteValueDictionary {
{ "LID", "[0-9]{1,8}" },
{ "PID", "[0-9]{1,8}" },
});
上面的路由結果使我得到這樣的友好URL
www.abc.com/en/1/13/cricket-world-cup
但是我想像示例中那樣進一步構造URL。
www.abc.com/en/sports/cricket-world-cup
范例:我發現這個網址更具結構性/ http://www.thenational.ae/news/world/europe/turkey-providing-jobs-a-future-for-more-greeks
我如何實現相同的結構,因為它們將querystrings
作為hiddenfields傳遞。 請為此類網址建議最佳方法。
另一個示例是http://mashreqbank.com/uae/en/corporate/lending/trade-finance.aspx
他們正在使用asp.net,但我不確定它是ASP.Net MVC還是ASP.Net Webform。
我一直在努力進行這種路由,甚至我找不到一個完整的示例,該示例可以考慮多個查詢字符串,因為大多數示例都基於一個查詢字符串。
我們非常感謝您通過示例對專家進行編碼。
更新:讓我們考慮一下該表,我用它來存儲頁面名稱,標題,處理程序,語言區域等。這只是一個演示表,與我所引用的示例結構化URL的實際網站並不相似。 我什至不知道他們是否要使用URL路由,或者它們是實際的物理文件夾和文件,例如舊樣式的網站,您可以在其中創建實際的文件夾並將文件放置在它們中。
Page_ID Page_Name Page_Title Page_Handler Parent_Page_ID Language_ID Region_ID
1 Home Home index.aspx 0 1 uae
2 Personal Personal index.aspx 0 1 uae
3 Accounts & Deposits Accounts & Deposits index.aspx 2 1 uae
4 Current Account Current Account current-account.aspx 3 1 uae
5 Current Gold Accounts gold Account gold-account.aspx 3 1 uae
6 Easy Saver Easy Saver Account saver-account.aspx 3 1 uae
7 Fixed Deposits Fixed Account fixed-account.aspx 3 1 uae
8 Loans Loans index.aspx 2 1 uae
9 Personal Loans Personal Loans index.aspx 8 1 uae
10 car Loans car Loans car-loan.aspx 8 1 uae
以上結構的網站示例http://mashreqbank.com/
如果頁面設計相同,我們可以使用通用頁面處理程序,這就是我假設讓我們說的page.aspx
,
Pleae感覺要對結構和數據進行更改,以便獲得所需的結果。
您可以簡單地擁有以下內容:
routes.MapPageRoute(
"article-route",
"en/{category}/{pageName}",
"~/en/page.aspx");
然后在en/page.aspx
您可以訪問category和pageName,假設您有一個查詢來基於這兩個變量查找正確的文章:
string category = Page.RouteData.Values["category"] as string;
string pageName = Page.RouteData.Values["pageName"] as string;
但是,如果您不能僅通過category
和pageName
來識別頁面(對於您的更新問題來說似乎是正確的),則可能需要該路線中的id
。 在這種情況下,您可以忽略category
和pageName
路由值,因為它們僅用於美觀的URL。 我們關心的唯一參數是id
因為這是您識別文章的方式。 例如,這是各種路線的三個示例
routes.MapPageRoute(
"uae-route",
"uae/en/{category}/{id}/{pageName}",
"~/en/index.aspx");
routes.MapPageRoute(
"gbr-route",
"gbr/en/{category}/{id}/{pageName}",
"~/en/index.aspx");
routes.MapPageRoute(
"account-route",
"en/{id}/{pageName}",
"~/en/current-account.aspx");
//then on en/index.aspx and current-account.aspx
int pageId= 0;
if (Int32.TryParse(Page.RouteData.Values["id"] as string, out pageId)) {
// get the page details (including parent page id and language id if needed)
// where Page_ID=pageId.
}
從聲音pageName
,您想做上面的第一個示例,這意味着您將需要一種僅通過category
和pageName
而不是任何類型的id
提取文章的方法。
更新:您不需要為每個路徑創建一個路由...這就是路由的重點。 如果您有多個處理程序,則每個處理程序至少需要一個路徑( .aspx
頁)。
在URL中使用id
最簡單,因為根據您的數據結構,這是識別要提取的頁面的唯一方法。 因此,讓我們使用您的示例,使用以下路線:
www.abc.com/en/personal
www.abc.com/en/personal/acounts-deposits/
www.abc.com/en/personal/acounts-deposits/current-account
www.abc.com/en/personal/acounts-deposits/current-gold-account
www.abc.com/en/personal/acounts-deposits/easy-saver
您有一條路線:
routes.MapPageRoute(
"personal_route",
"en/personal/{category}/{pageName}",
"~/personal.aspx",
false,
new RouteValueDictionary { { "category", string.Empty }, {"pageName", string.Empty}}); //allow for no values
而且personal.aspx
具有以下代碼:
protected void Page_Load(object sender, EventArgs e)
{
string category = Page.RouteData.Values["category"] as string;
string pageName = Page.RouteData.Values["pageName"] as string;
if (String.IsNullOrEmpty(category)) {
//no category... must be the /personal route. handle that
}
else if (String.IsNullOrEmpty(pageName)) {
//no page name, just load the category page content
//Psuedo query against your non-existant data schema
//SELECT * FROM SiteContent WHERE Page_Handler='Personal' AND Page_Category=category && Page_URL=""
}
else {
//SELECT * FROM SiteContent WHERE Page_Handler='Personal' AND Page_Category=category && Page_URL=pageName
}
}
如您所見,您的問題是您無法識別沒有ID的頁面。 您需要用唯一的URL替換表中的所有ID。 這是可行的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.