2013-05-28 23 views
1

我是新的ASP.NET路由並有一個問題。ASP.NET路由可選的第一個參數

在我正在開發的網站上,訪問者註冊並創建一個帳戶(顯示名稱),如JohnDoe和網站個人化自己,並提供有關顯示名稱的信息。

例如(在路由表中的順序,我現在有):

http://www.domain.com/   - Generic index page 
http://www.domain.com/Page1  - Generic page1 
http://www.domain.com/Page2  - Generic page2 
http://www.domain.com/JohnDoe  - Personalised index page 
http://www.domain.com/JohnDoe/Page1 - Personalised page1 
http://www.domain.com/JohnDoe/Page2 - Personalised page2 

上述工作正常(我只是對每種可能的規則)。

我的問題是,我現在需要在網站的頁面上創建asp:HyperLink控件。目前,我使用這樣的:

NavigateUrl="<%$ RouteUrl:RouteName=ROUTENAME %>" 

....超鏈接控制

的標籤哪有我,考慮到以下地址....

http://www.domain.com/Example  - Generic example page 
http://www.domain.com/JohnDoe/Example - Personalised example page 

.. ..match ROUTENAME,第一個參數可以是可選的?

我能明顯創建兩條路線,如下....

Routes.MapPageRoute("Example_No_Displayname", "Example", "~/Example.aspx") 
Routes.MapPageRoute("Example_With_Displayname", "{Code}/Example", "~/Example.aspx") 

....但是這意味着該路由名稱需要有所不同,我需要綁定Hyperlink控件同時匹配其中。

我希望我已經說清楚了,我很感謝社區可以給予的任何幫助。

回答

0

將用戶名本身放在URL中會有點不典型。實際的用戶身份/名稱通常會從一些已建立的安全上下文/令牌(例如cookie)中提取,因此您可以爲匿名頁面和個性化頁面使用相同的URL。是否有一個特定的原因,你想要在URL中的用戶名?

+0

用戶名僅僅是爲了這個問題的例子。用戶名將是我正在撰寫的網站上的顯示名稱。與安全無關。我將編輯這個問題,以免再有混淆。 –

+0

可能對我來說更好的說,人們會將個性化的網站地址提供給他們的朋友。認爲facebook.com/JohnDoe :)與安全無關或正在登錄到我的網站。 –

+0

好的,有道理。有什麼理由不能只使用一個具有可選參數的路線?本質上這將是您在上面用{Code}參數列出的第二條路線,除了爲Code指定的默認值。看到這個答案:http://stackoverflow.com/a/7133692/480588。 –

0

如果您使用GetRouteUrl方法,則不需要直接匹配路徑名稱。這樣你仍然可以使用你需要的兩條路線來完成這項工作。請參閱完整樣本here

+0

非常感謝示例代碼,它完美地工作。即使對於您提供的示例,唯一的問題是,在我的網站上,操作參數與文件的物理名稱不匹配。想象一下,我需要將action參數設置爲「my_profile」,並且它必須去的頁面是「MyProfile.aspx」。我試圖調整您的示例,使用GetRouteUrl方法(爲了能夠處理這些HyperLink控件)考慮「my_profile/{code}」和「/ my_profile」,當文件的實際名稱是MyProfile.aspx時。 –

+0

我更新了示例以包含將動作名稱映射到不同頁面名稱的快速且骯髒的方式。 –

+0

抱歉回覆您。謝謝您的幫助。 –