4

我在ASP.NET 4(Web表單,而不是MVC)中使用新的路由功能。現在我有一個綁定到數據源的asp:ListView。其中一個屬性是ClientID,我想用它將ListView項鍊接到另一頁。在global.asax我已經定義了一個路線:如何以聲明方式創建帶有數據綁定參數的RouteUrls?

System.Web.Routing.RouteTable.Routes.MapPageRoute("ClientRoute", 
    "MyClientPage/{ClientID}", "~/Client.aspx"); 

使例如http://server/MyClientPage/2是有效的URL,如果客戶端ID = 2的存在。

在ListView項目我有一個asp:超鏈接,這樣我可以創建鏈接:

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl='<%# "~/MyClientPage/"+Eval("ClientID") %>' > 
    Go to Client details 
</asp:HyperLink> 

雖然這工作我寧願用RouteUrl表達式使用RouteName而不是硬編碼的路線。例如具有恆定的ClientID = 2我可以這樣寫:

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl="<%$ RouteUrl:ClientID=2,RouteName=ClientRoute %>" > 
    Go to Client details 
</asp:HyperLink> 

現在我想知道我是否可以結合路線表達式語法和數據綁定語法。基本上我喜歡用<%# Eval("ClientID") %>替換上面的常量2。但是,在一個簡單的方式做這...

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl='<%$ RouteUrl:ClientID=<%# Eval("ClientID") %>,RouteName=ClientRoute %>' > 
    Go to Client details 
</asp:HyperLink> 

...不起作用:<%# Eval("ClientID") %>不評價,但認爲作爲一個字符串。四處引用幾種引號也沒有幫助(大多數情況下,解析器錯誤)。

問題:我在這裏試圖實現的是否可能?如果是,那麼正確的方法是什麼?

預先感謝您!

回答

13

使用System.Web.UI.Control.GetRouteUrl

VB:

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl='<%# GetRouteUrl("ClientRoute", New With {.ClientID = Eval("ClientID")}) %>' > 
    Go to Client details 
</asp:HyperLink> 

C#:

<asp:HyperLink ID="HyperLinkClient" runat="server" 
    NavigateUrl='<%# GetRouteUrl("ClientRoute", new {ClientID = Eval("ClientID")}) %>' > 
    Go to Client details 
</asp:HyperLink> 
+0

很好,工作正常!我剛剛使用此解決方案更改了我的標記。非常感謝你! – Slauma 2010-06-06 19:16:29

+1

注意:至少在C#中,您需要對NavigateUrl使用'and not'。只需將示例1複製到1即可。 – scottheckel 2013-07-18 16:45:40

1

我知道這是基本相同的Samu嵐的解決方案,但不是使用.NET控件,你可以使用普通的HTML錨點控件。

<a href='<%# GetRouteUrl("ClientRoute", new {ClientID = Eval("ClientID")}) %>'> 
    Go to Client details 
</a> 
相關問題