1

HTML ボタンがあり、サーバー側のクリック イベントが必要ですが、ボタンがクリックされてページがポストバックを実行したときに発生しません。ボタンは、情報のテーブルをレンダリングする のItemTemplate内部にあります。<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イベントによって処理される必要があるため、このようには機能しないと思います。

これを機能させるには、ボタンのCommandNameとを設定CommandArgumentし、リストビューの で特定の値を処理する必要がありますItemCommand

しかし、私の記憶が正しければ、 にはandプロパティがありHtmlInputButtonません。代わりに、CommandNameCommandArgumentasp:Button

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

リストビューの item コマンドを処理します。

 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 に答える