فقدان أحداث Button.Click بعد أول إعادة النشر الجزئي في UpdatePanel
-
05-07-2019 - |
سؤال
ولدي صفحة له مثيل واحد من على UserControl أن نفسها لديها UpdatePanel واحد. داخل UpdatePanel العديد من الضوابط زر. والسلكية الحدث Click لهذه الضوابط حتى في التعليمات البرمجية الخلفية، في الحدث التهيئة في UserControl.
وأحصل على الحدث Click لزر الأولى دفع، في كل مرة، لا مشكلة. بعد ذلك، وأنا فقط الحصول على انقر أحداث زر واحد (SearchButton) - يتم تجاهل بقية. ولقد تضمنت التعليمات البرمجية للتحكم أدناه - على سبيل الإيجاز، لقد استبعاد أساليب معالج الحدث انقر فوق، ولكنها جميعا من معيار "باطل Button_Click (المرسل وجوه، EventArgs ه)" متنوعة. أي أفكار؟
<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
}
المحلول
ويبدو أن إضافة UseSubmitBehavior = "كاذبة" للتعريفات زر قد حل مشكلتي. ما زلنا لا نعرف لماذا هذا الزر الأول انقر عملت على الإطلاق.
نصائح أخرى
والسبب الأكثر ترجيحا لهذا سيكون معرفات العميل الذي يولد صافي لضوابطها تغيير. يتم تعيين هذه حيوي ويمكن تغيير بين إعادات النشر / إعادات النشر جزئية.
إذا يتم إضافة عناصر تحكم إلى لوحة حيوي، يمكن معرف الزر الخاص بك أن تكون مختلفة بين إعادات النشر تسبب صافي لتكون قادرة على ربط الحدث انقر فوق إلى معالج الحدث الصحيح في التعليمات البرمجية.
في حالتي، كان لي LinkButton
داخل معالج الحدث dgPatients_ItemDataBound
أن استخدام الخاصية PostBackUrl
.
ولحظة لقد غيرت LinkButton
إلى HyperLink
، وذهب بعيدا المشكلة.