2008-10-07 4 views
4

자체 UpdatePanel이 하나있는 UserControl 인스턴스가 하나있는 페이지가 있습니다. UpdatePanel에는 여러 Button 컨트롤이 있습니다. 이러한 컨트롤의 Click 이벤트는 UserControl의 Init 이벤트에서 코드 숨김으로 연결됩니다.UpdatePanel에서 첫 번째 부분 포스트 백 이후에 Button.Click 이벤트가 손실됩니다.

매번 첫 번째 버튼에 대한 Click 이벤트가 발생하므로 문제가 없습니다. 그 후, 하나의 버튼 (SearchButton)에 대해서만 Click 이벤트를 얻습니다. 나머지는 무시됩니다. 아래에 컨트롤에 대한 코드가 포함되어 있습니다 - 간결함을 위해 click 이벤트 처리기 메서드는 제외했지만 모두 "void Button_Click (개체 보낸, EventArgs e)"표준입니다. 어떤 아이디어?

<asp:UpdatePanel ID="PickerUpdatePanel" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Panel ID="Container" runat="server"> 
      <div> 
       <asp:TextBox ID="PickerResults" runat="server" style="margin-right: 3px;" SkinID="Plain" /> 
       <asp:Image 
        ID="LaunchPopup" runat="server" ImageUrl="~/images/icons/user_manage.png" 
        ImageAlign="Top" BorderColor="#294254" BorderStyle="Dotted" BorderWidth="1px" 
        Height="20px" Width="20px" style="cursor: pointer;" /> 
      </div> 
      <asp:Panel ID="PickerPanel" runat="server" DefaultButton="OKButton" CssClass="popupDialog" style="height: 227px; width: 400px; padding: 5px; display: none;"> 
       <asp:Panel runat="server" id="ContactPickerSearchParams" style="margin-bottom: 3px;" DefaultButton="SearchButton"> 
        Search: <asp:TextBox ID="SearchTerms" runat="server" style="margin-right: 3px;" Width="266px" SkinID="Plain" /> 
        <asp:Button ID="SearchButton" runat="server" Text="Go" Width="60px" SkinID="Plain" /> 
       </asp:Panel> 
       <asp:ListBox ID="SearchResults" runat="server" Height="150px" Width="100%" SelectionMode="Multiple" style="margin-bottom: 3px;" /> 
       <asp:Button ID="AddButton" runat="server" Text="Add >>" style="margin-right: 3px;" Width="60px" SkinID="Plain" /> 
       <asp:TextBox ID="ChosenPeople" runat="server" Width="325px" SkinID="Plain" /> 
       <div style="float: left;"> 
        <asp:Button ID="AddNewContact" runat="server" SkinID="Plain" Width="150px" Text="New Contact" /> 
       </div> 
       <div style="text-align: right;"> 
        <asp:Button ID="OKButton" runat="server" Text="Ok" SkinID="Plain" Width="100px" /> 
       </div> 
       <input id="SelectedContacts" runat="server" visible="false" /> 
      </asp:Panel> 
      <ajax:PopupControlExtender ID="PickerPopEx" runat="server" PopupControlID="PickerPanel" TargetControlID="LaunchPopup" Position="Bottom" /> 
     </asp:Panel> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="AddButton" EventName="Click" /> 
     <asp:AsyncPostBackTrigger ControlID="SearchButton" EventName="Click" /> 
     <asp:AsyncPostBackTrigger ControlID="AddNewContact" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel> 

public partial class ContactPicker : System.Web.UI.UserControl 
{ 
    protected void Page_Init(object sender, EventArgs e) 
    { 
     SearchButton.Click += new EventHandler(SearchButton_Click); 
     AddButton.Click += new EventHandler(AddButton_Click); 
     OKButton.Click += new EventHandler(OKButton_Click); 
    } 

    // Other code left out 
} 

답변

4

버튼 정의에 UseSubmitBehavior = "false"를 추가하면 내 문제가 해결 된 것 같습니다. 여전히 첫 번째 버튼 클릭이 전혀 효과가 없었던 이유를 모르겠습니다.

1

.Net이 컨트롤 변경을 위해 생성하는 클라이언트 ID가 가장 큰 이유입니다. 이들은 동적으로 할당되며 포스트 백/부분 포스트 백간에 변경할 수 있습니다.

컨트롤이 동적으로 패널에 추가되는 경우 .Net이 클릭 이벤트를 코드의 올바른 이벤트 처리기에 연결할 수없는 포스트 백간에 버튼의 ID가 다를 수 있습니다.

+0

나에게도 마찬가지였다. 동적으로 추가 된 컨트롤의 ID를 매번 동일하게 유지하도록 설정하면 고정됩니다 –

0

제 경우에는 PostBackUrl 속성을 사용하는 dgPatients_ItemDataBound 이벤트 처리기 내에 LinkButton이 있습니다.

LinkButtonHyperLink으로 변경 한 순간 문제가 사라졌습니다.

관련 문제