2011-06-04 24 views
2

我在Repeater內有Hyperlink。我想要的是將NavigateUrl設置爲Url頁面並將查詢字符串添加到末尾。我想出了:如何在控制標記中使用條件語句?

<asp:Hyperlink ID="myLink" runat="server" Text="My Link" 
    NavigateUrl='<%# Request.Url + "?Id= + Eval("Id") %>' /> 

這工作正常。問題是我想要一些如何添加一些邏輯,所以如果Request.Url已經包含查詢字符串,則不添加id查詢字符串部分。

如何在html頁面內做到這一點?請記住,我不能使用javascript

回答

1
<asp:Hyperlink ID="myLink" runat="server" Text="My Link" 
    NavigateUrl='<%# Request.RawUrl.Contains("?") ? Request.RawUrl : 
    Request.RawUrl + "?Id= + Eval("Id") %>' /> 
+0

嗨馬格努斯,感謝您的回答。我會試一試。 – 2011-06-04 09:47:58

1

你必須檢查兩件事情能夠正確地建立自己的導航網址:

  1. 是否URL包含標識參數?
  2. 該網址是否已經包含任何參數?

使用以下:

<asp:Hyperlink ID="myLink" runat="server" Text="My Link"  
    NavigateUrl='<%# Request.QueryString["Id"] == null ? 
    (Request.Url.Contains("?") ? Request.Url + "&Id= + Eval("Id") : 
    Request.Url + "?Id= + Eval("Id")) : Request.Url %>' /> 
+0

問題是:「Request.Url已經包含查詢字符串...」。所以沒有必要專門檢查ID查詢字符串 – Magnus 2011-06-04 10:04:46

+0

@Magnus:你錯過了如果... – 2011-06-04 10:08:47

+0

@Akram同一點,雖然... – Magnus 2011-06-04 10:10:35

1

這應該工作。

<asp:Hyperlink ID="myLink" runat="server" Text="My Link" 
    NavigateUrl='<%# (Request.Url.ToString().IndexOf("?") > -1 ? Request.Url.ToString() : Request.Url.ToString() + "?Id= + Eval("Id")) %>' /> 

您可能還需要背後的代碼創建一個受保護的方法,或者如果您需要在這多個地方創建一個擴展方法。

protected string AddIdToRequestUrl(object id) 
{ 
    return Request.Url.ToString().IndexOf("?") > -1 ? 
    Request.Url.ToString() : 
    Request.Url.ToString() + "?Id=" + id.ToString(); 
} 

<asp:Hyperlink ID="myLink" runat="server" Text="My Link" 
    NavigateUrl='<%# AddIdToRequestUrl(Eval("Id")) %>' /> 
+0

您必須修改功能以匹配表達式! – 2011-06-04 10:01:29

+0

@Akram Shahda謝謝 – 2011-06-04 10:58:00

相關問題