2012-07-14 119 views
1

我有一個html按鈕,我想要一個服務器端點擊事件,但是當按鈕被點擊並且頁面做回發時它不會觸發。該按鈕位於ItemTemplate之內,<asp:ListView id="usersListView"/>呈現信息表。OnServerClick for button not working

ASPX

<button runat="server" id="delete" class="btn btn-mini" title="Delete" OnServerClick="delete_Onclick"></button> 

aspx.cs

protected void delete_Onclick(object sender, EventArgs e) { 
    ListViewItem listViewItem = (ListViewItem)((Button)sender).NamingContainer; 
    if(listViewItem != null) { 
     Membership.DeleteUser(((Label) listViewItem.FindControl("userName")).Text); 
    } 
} 
+0

是'AutoEventWireup =「真」'在頁面聲明? – freefaller 2012-07-14 21:48:46

回答

2

我的猜測是,它不會像這樣的工作,因爲通過放置在項模板嵌套控件引發的事件應而是由ListView的ItemCommand事件處理。

爲此,您應該設置按鈕的CommandNameCommandArgument並處理列表視圖的ItemCommand中的特定值。

但是,如果我記得正確,HtmlInputButton不具有CommandNameCommandArgument屬性。相反,使用asp:Button

<asp:Button id="delete" runat="server" CommandName="something" CommandArgument="somethingelse" /> 

和處理ListView的itemcommand:

protected void usersListView_ItemCommand(object sender, ListViewCommandEventArgs e) 
{ 
    switch (e.CommandName) { 
     case "something" : 
      // this is where you handle the button click 
    } 
} 

注意CommandArgument通常綁定到特定商品的價值(ID也許),使服務器端處理程序中,你可以精確地識別精確點擊按鈕:

<asp:Button id="delete" runat="server" CommandName="something" CommandArgument="<%# Eval("id") %>" /> 

protected void usersListView_ItemCommand(object sender, ListViewCommandEventArgs e) 
{ 
    switch (e.CommandName) { 
     case "something" : 
      // this is where you handle the button click 
      var itemid = e.CommandArgument; 
    } 
} 
+0

這很好,謝謝你Wiktor。儘管我沒有觸發ItemCommand事件處理程序的問題。我設置ListView的'OnItemCommand =「usersListView_ItemCommand」',但沒有任何事情發生,當我點擊一個刪除按鈕時,它根本沒有點擊處理程序。 – bflemi3 2012-07-16 12:45:04