Question

J'ai une page qui possède une seule instance d'un UserControl qui possède elle-même un seul UpdatePanel. UpdatePanel contient plusieurs contrôles Button. L'événement Click de ces contrôles est câblé dans le code-behind, dans l'événement Init de UserControl.

Je reçois l'événement Click du premier bouton que j'appuie, à chaque fois, sans problème. Après cela, je ne reçois que des événements Click pour un bouton (SearchButton) - les autres sont ignorés. J'ai inclus le code du contrôle ci-dessous - par souci de brièveté, j'ai exclu les méthodes du gestionnaire d'événements click, mais elles sont toutes conformes à la norme "void Button_Click (expéditeur d'objet, EventArgs e)". variété. Des idées?

<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
}
Était-ce utile?

La solution

Il semble que l’ajout de UseSubmitBehavior = " false " aux définitions de bouton a résolu mon problème. Je ne sais toujours pas pourquoi ce premier clic a fonctionné.

Autres conseils

La raison la plus probable en serait les identifiants client générés par .Net lors de la modification de ses contrôles. Ceux-ci sont affectés dynamiquement et peuvent changer entre postbacks / postbacks partiels.

Si des contrôles sont ajoutés au panneau de manière dynamique, l'ID de votre bouton peut être différent entre les publications. Par conséquent, .Net ne peut pas lier l'événement click au gestionnaire d'événements approprié dans votre code.

Dans mon cas, j'avais un LinkButton dans un gestionnaire d'événements dgPatients_ItemDataBound qui utilisait la propriété PostBackUrl .

Au moment où j'ai modifié le LinkButton en HyperLink , le problème a disparu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top