1

我有一个 html 按钮,我想要一个服务器端单击事件,但是当单击按钮并且页面执行回发时它不会触发。该按钮位于用于呈现信息表的ItemTemplatefor an内。<asp:ListView id="usersListView"/>

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);
    }
}
4

1 回答 1

2

我的猜测是它不会像这样工作,因为放置在项目模板中的嵌套控件引发的事件应该由 ListView 的ItemCommand事件处理。

为此,您应该设置按钮CommandNameCommandArgument处理列表视图中的特定值ItemCommand

但是,如果我没记错的话,HtmlInputButton没有CommandNameCommandArgument属性。相反,使用asp:Button

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

并处理列表视图的 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; 
     }
 }
于 2012-07-14T21:53:04.767 回答