2014-02-15 114 views
1

在我的項目(ASP.NET Web窗體)中,我想使用從NuGet安裝的Friendly URLs友好的URL和查詢字符串

我註冊路線的Global.asax文件

Public Shared Sub RegisterRoutes(routes As RouteCollection) 
    routes.MapPageRoute("Route", "default/{id}", "~/default.aspx?id={id}") 
End Sub 

有了這個代碼,我可以使用默認/ 123,而不是默認ID = 123?我想在url中添加分配給id的名稱。所以我可以有這樣的網址:default?123-Firstname-Lastnam。名稱保存在數據庫中,單列。我怎樣才能第二個參數(名稱)添加到URL中添加符號-和不信是這樣顯示的:。řčš(因爲應用是在再檢查一下語言 謝謝回答

+0

您應該閱讀[爲Web表單定義路由](http://msdn.microsoft.com/zh-cn/library/cc668177.aspx)。 – MikeSmithDev

+0

我做到了。完全按照文章編寫,但在訪問路由{value}時,它是0. – jstorm31

回答

5

要使用FriendlyUrls,後你的NuGet安裝它,去你global.asax並啓用它。

Imports Microsoft.AspNet.FriendlyUrls 

Public Class Global_asax 
    Inherits System.Web.HttpApplication 

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
     RegisterRoutes(RouteTable.Routes) 
    End Sub 

    Sub RegisterRoutes(ByVal routes As RouteCollection) 
     routes.EnableFriendlyUrls() 
    End Sub 
    'rest of global 

這幾乎是它得到了一個頁面的URL的值,你會通過URL段需要循環(別忘了Imports Microsoft.AspNet.FriendlyUrls):

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    For Each segment As String In HttpRequestExtensions.GetFriendlyUrlSegments(Request) 
     Dim val As String = segment 
    Next 
End Sub 

所以參觀siteURL.com/default/123將循環一次,給你123,而siteURL.com/default/122/Bilbo/Baggins將循環三次,給你122BilboBaggins



或者,如果你只是想使用純路由,而不是FriendlyUrls:

routes.MapPageRoute("id-route", "default/{id}", "~/default.aspx") 

關於路由的一個好處是,你可以使用查詢使用URL傳遞變量數據沒有字符串。所以要通過域名信息數據的路由看起來像

Sub RegisterRoutes(ByVal routes As RouteCollection) 
    routes.MapPageRoute("name-route", "default/{id}/{firstName}/{lastName}", "~/default.aspx") 
End Sub 

然後Default.aspx的可以用siteURL.com/default/123/Frodo/Baggins被擊中,有:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
    Dim id As Integer = 0 
    Int32.TryParse(Page.RouteData.Values("id"), id) 
    Dim firstName As String = Convert.ToString(Page.RouteData.Values("firstName")) 
    Dim lastName As String = Convert.ToString(Page.RouteData.Values("lastName")) 
    'do something if id > 0 
End Sub 



其他注意事項:如果只想名在一個列中,則可以合併firstNamelastName變量以進行保存。使用-作爲您所示的有問題的分隔符不是一個好主意,因爲人們可以使用連字符名稱。將姓名保存在單個列中往往會導致問題,因爲這樣會使得按姓氏或名字排序困難得多。

此外,它似乎將從GET命令插入數據庫。我認爲使用PUTPOST會更清楚。

+0

我完全按照你寫的。但是當我有url - site.com/default/123並且想要得到id時,它總是0.不應該添加一些引用嗎?我通過NuGet安裝了FriendlyUrls。 – jstorm31

+0

@ jstorm31對,對不起。最初的答案只是用於一般路由。我添加了一個如何從friendlyUrls獲取網址段的例子。 – MikeSmithDev

+0

非常感謝,現在可以工作;) – jstorm31

相關問題