代码之家  ›  专栏  ›  技术社区  ›  Greg Hurlman

丢失按钮。在UpdatePanel中单击第一次部分回发后的事件

  •  4
  • Greg Hurlman  · 技术社区  · 17 年前

    我有一个页面,它有一个UserControl实例,而UserControl本身有一个UpdatePanel。UpdatePanel中有几个按钮控件。这些控件的单击事件在UserControl的Init事件中的代码隐藏中连接。

    <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
    }
    
    3 回复  |  直到 17 年前
        1
  •  4
  •   Greg Hurlman    17 年前

        2
  •  1
  •   Blatfrig    17 年前

    最可能的原因是.Net为其控件更改而生成的客户端ID。这些是动态分配的,可以在回发/部分回发之间更改。

    如果控件被动态添加到面板中,则回发之间的按钮ID可能不同,从而导致.Net无法将单击事件绑定到代码中的正确事件处理程序。

        3
  •  0
  •   Orson    15 年前

    就我而言,我有一个 LinkButton 在一段时间内 dgPatients_ItemDataBound PostBackUrl

    从我换衣服的那一刻起 链接按钮 HyperLink