Pregunta

Tengo una página que tiene una sola instancia de un UserControl que a su vez tiene un único UpdatePanel. Dentro del UpdatePanel hay varios controles de botón. El evento Click para estos controles está conectado en el código subyacente, en el evento Init del UserControl.

Obtengo el evento Click para el primer botón que presiono, cada vez, no hay problema. Después de eso, solo obtengo eventos Click para un botón (SearchButton) - el resto se ignora. He incluido el código para el control a continuación: por motivos de brevedad, he excluido los métodos del controlador de eventos de clic, pero todos son estándar del botón "void Button_Click" (objeto remitente, EventArgs e) " variedad. ¿Alguna idea?

<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
}
¿Fue útil?

Solución

Parece que al agregar UseSubmitBehavior = " false " a las definiciones de botones ha resuelto mi problema. Aún no sé por qué ese primer clic en el botón funcionó en absoluto.

Otros consejos

La razón más probable para esto sería la identificación de los clientes que .Net genera para el cambio de sus controles. Estos se asignan dinámicamente y podrían cambiar entre devoluciones / devoluciones parciales.

Si los controles se agregan dinámicamente al panel, la ID de su botón podría ser diferente entre las devoluciones de datos que hacen que .Net no pueda vincular el evento de clic con el controlador de eventos correcto en su código.

En mi caso, tuve un LinkButton dentro de un controlador de eventos dgPatients_ItemDataBound que usaba la propiedad PostBackUrl .

En el momento en que cambié el LinkButton a un HyperLink , el problema desapareció.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top