Der Verlust Button.Click Ereignisse nach dem ersten Teil-Postbacks in Update
-
05-07-2019 - |
Frage
Ich habe eine Seite, die eine einzelne Instanz eines Usercontrol hat, dass selbst eine einzige Update hat. Im Inneren des Update sind mehrere Steuerelemente Button. Das Click-Ereignis für diese Kontrollen werden in der Code-Behind, in dem Init-Ereignisse des Usercontrol verdrahtet.
ich das Click-Ereignis für die erste Taste I drücken, jedes Mal, kein Problem. Danach habe ich Events nur Anweisungen für eine Schaltfläche (search) - der Rest ignoriert werden. Ich habe den Code für die Steuerung unten enthalten - aus Gründen der Kürze, ich die Click-Ereignishandler Methoden ausgeschlossen haben, aber sie sind alle von der Norm „Leere Button_Click (object sender, EventArgs e)“ Vielfalt. Irgendwelche Ideen?
<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
}
Lösung
Es scheint, dass das Hinzufügen von UseSubmitBehavior = „false“ auf die Schaltfläche Definitionen mein Problem gelöst hat. Sie wissen immer noch nicht, warum das erste Schaltfläche klicken überhaupt funktioniert.
Andere Tipps
Der wahrscheinlichste Grund dafür wäre der Client-IDs, die .NET generiert für seine Kontrollen zu ändern. Diese werden dynamisch zugewiesen und könnte zwischen Postbacks / Teilpostbacks ändern.
Wenn die Kontrollen an die Platte dynamisch hinzugefügt werden, die ID Ihrer Taste unterschiedlich sein könnte zwischen Postbacks verursacht .Net nicht in der Lage sein, das Click-Ereignis auf die richtigen Event-Handler in Ihrem Code zu binden.
In meinem Fall hatte ich eine LinkButton
innerhalb eines dgPatients_ItemDataBound
Event-Handler, der die PostBackUrl
Eigenschaft verwendet.
Der Moment ich die LinkButton
zu einem HyperLink
geändert, das Problem ging weg.