문제

USERCONTROL의 단일 인스턴스가있는 페이지가있는 페이지가 있습니다. UpdatePanel 내부에는 여러 버튼 컨트롤이 있습니다. 이러한 컨트롤의 클릭 이벤트는 USERCONTROL의 Init 이벤트에서 코드-비인에 연결됩니다.

매번 푸시하는 첫 번째 버튼에 대한 클릭 이벤트가 발생합니다. 그 후, 나는 하나의 버튼 (SearchButton)에 대한 클릭 이벤트 만 얻습니다. 나머지는 무시됩니다. Brevity를 위해 아래 컨트롤 코드를 포함 시켰습니다. Brevity를 위해 클릭 이벤트 핸들러 방법을 제외했지만 모든 표준 "void button_click (Object Sender, 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
}
도움이 되었습니까?

해결책

버튼 정의에 useubmitbehavior = "false"를 추가하면 내 문제가 해결 된 것 같습니다. 그 첫 번째 버튼 클릭이 왜 전혀 작동했는지 아직도 모릅니다.

다른 팁

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

컨트롤이 패널에 동적으로 추가되는 경우 버튼의 ID는 포스트 백 사이에 다를 수 있습니다.

제 경우에는 a가있었습니다 LinkButton ~ 이내에 dgPatients_ItemDataBound 사용한 이벤트 핸들러 PostBackUrl 재산.

내가 바꾸는 순간 LinkButton a HyperLink, 문제는 사라졌습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top