2015-06-20 64 views
0

我有三個超鏈接,每個列表元素都在webform的無序列表中。我想要一個單一的函數來處理所有的超鏈接點擊。所以我需要確定在文件後面的代碼中單擊的超鏈接的ID,以便我能夠使用asp.net C#正確處理點擊響應。我想有一個功能可以處理所有三個onclick事件。在這個函數中,我想確定被點擊的超鏈接的id和id的基礎,代碼的相應部分將在代碼後面的文件中執行。如何識別使用asp.net C#單擊的超鏈接的ID?

<ul> 
    <li> 
     <a id="A5" href="#" onServerClick="Anchor_Click" runat="server">...</a> 
    </li> 
    <li> 
     <a id="A6" href="#" onServerClick="Anchor_Click" runat="server">...</a> 
    </li> 
    <li> 
     <a id="A7" href="#" onServerClick="Anchor_Click" runat="server">...</a> 
    </li> 
</ul> 

在代碼背後的文件。

protected void Anchor_Click(Object sender, EventArgs e) 
{ 
    if(id=="A5") 
     some code 
    else if(id=="A6") 
     some code 
    else if(id=="A7") 
     some code 
} 
+0

難道這些超鏈接,如''標籤或'的'? – dman2306

+0

這些是 s – abc

回答

0

所有ASP.NET UI元素的事件處理程序提供兩個參數:

TheEventHandler(object sender, EventArgs e)

發件人表示觸發事件的元件。在你的情況下,這將是超鏈接。因此,將其轉換爲適當的類型(或者甚至只是控制爲更通用,然後獲得ID):

(sender as Control).ClientID會給你點擊的項目的ClientID。

然而,這僅作品如果元素是runat="server"如果這是一個真正的超級鏈接作爲只是一個普通的老<a>標籤,就沒有辦法捕捉到服務器端事件。

+0

它不起作用 – abc

0

如果您不使用HyperLink(您可能不使用HyperLink,因爲這些觸發器會觸發TargetUrl而不是帖子),但使用LinkBut​​ton可以設置CommandArgument。在OnClick上,您可以讀取CommandArgument並將其解析爲一個int。

如果您的鏈接與數據源的項目結合,你可以這樣做:

<asp:LinkButton ID="someLink" runat="server" CommandArgument="<%# ((YourObjectType)Container.DataItem).Id %>" OnClick="SomeLinkClicked" /> 

如果您的鏈接頁面本身沒有約束力的,你應該在設置commandArgument代碼隱藏的鏈接,應該可以直接訪問。

//Markup 
<asp:LinkButton ID="someLink" runat="server" OnClick="SomeLinkClicked" /> 
//code-behind 
someLink.CommandArgument = yourObject.Id 

在你的OnClick可以做到這一點得到任何需要爲這個ID做的ID和觸發:

protected void SomeLinkClicked(object sender, CommandEventArgs args) { 
    int id; 
    if (int.TryParse(args.CommandArgument, out id)) { 
     //Do something here with id 

    } 
}