2012-07-14 2 views
1

HTML 단추가 있는데 서버 쪽 클릭 이벤트가 필요하지만 단추를 클릭하면 페이지가 다시 게시 될 때 실행되지 않습니다. 이 단추는 정보 표를 렌더링하는 <asp:ListView id="usersListView"/>의 경우 ItemTemplate 안에 있습니다.OnServerClick for 단추가 작동하지 않습니다.

영문

<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

Page 선언에서'AutoEventWireup = "true"'가 있습니까? – freefaller

답변

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; 
    } 
} 
+0

이것은 훌륭합니다, Wiktor에게 감사드립니다. ItemCommand 이벤트 처리기가 실행되지 않는 문제가 있습니다. ListView'OnItemCommand = "usersListView_ItemCommand"를 설정했지만 아무 것도 일어나지 않습니다. 삭제 버튼을 클릭해도 핸들러를 전혀 치지 않습니다. – bflemi3

관련 문제