Domanda

Ho una Pagina che ha una singola istanza di un UserControl che a sua volta ha un unico UpdatePanel. All'interno di UpdatePanel sono presenti numerosi controlli Button. L'evento Click per questi controlli è cablato nel code-behind, nell'evento Init di UserControl.

Ottengo l'evento Click per il primo pulsante che premo, ogni volta, nessun problema. Successivamente, ottengo solo eventi Click per un pulsante (SearchButton) - il resto viene ignorato. Ho incluso il codice per il controllo di seguito: per brevità, ho escluso i metodi del gestore di eventi click, ma sono tutti standard " void Button_Click (mittente oggetto, EventArgs e) " varietà. Qualche 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
}
È stato utile?

Soluzione

Sembra che l'aggiunta di UseSubmitBehavior = " false " alle definizioni dei pulsanti ha risolto il mio problema. Non so ancora perché il primo clic del pulsante abbia funzionato affatto.

Altri suggerimenti

Il motivo più probabile di ciò sarebbe l'ID client che .Net genera per la modifica dei suoi controlli. Questi sono assegnati in modo dinamico e potrebbero cambiare tra postback / postback parziali.

Se i controlli vengono aggiunti dinamicamente al pannello, l'ID del tuo pulsante potrebbe essere diverso tra i postback causando .Net non essere in grado di legare l'evento click al gestore eventi corretto nel tuo codice.

Nel mio caso, avevo un LinkButton all'interno di un gestore di eventi dgPatients_ItemDataBound che utilizzava la proprietà PostBackUrl .

Nel momento in cui ho cambiato il LinkButton in un HyperLink , il problema è scomparso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top