Кнопка Потери.Щелкните события после первой частичной обратной передачи в панели обновления

#asp.net #asp.net-ajax #user-controls #postback

Вопрос:

У меня есть страница, на которой есть один экземпляр пользовательского элемента управления, который сам имеет одну панель обновления. Внутри панели обновления находится несколько кнопок управления. Событие щелчка для этих элементов управления подключено в коде, в событии инициализации пользовательского элемента управления.

Я получаю событие щелчка для первой кнопки, которую нажимаю, каждый раз, без проблем. После этого я получаю события нажатия только для одной кнопки (кнопка поиска) — остальные игнорируются. Я включил код для элемента управления ниже — для краткости я исключил методы обработчика событий click, но все они относятся к стандартному типу «void Button_Click(отправитель объекта, параметры события e)». Есть какие-нибудь идеи?

 <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
}
 

Ответ №1:

Похоже, что добавление UseSubmitBehavior=»false» в определения кнопок решило мою проблему. До сих пор не знаю, почему этот первый щелчок кнопки вообще сработал.

Ответ №2:

Наиболее вероятной причиной этого были бы идентификаторы клиентов, которые .Сеть генерирует изменения в своих элементах управления. Они назначаются динамически и могут меняться между обратными / частичными обратными сообщениями.

Если элементы управления добавляются на панель динамически, идентификатор вашей кнопки может отличаться в зависимости от причины обратной связи .Сеть, чтобы не удалось связать событие щелчка с правильным обработчиком событий в вашем коде.

Комментарии:

1. Так было и со мной. Если вы зададите идентификаторы динамически добавляемых элементов управления, чтобы каждый раз они были одинаковыми, это исправит это

Ответ №3:

В моем случае у меня был обработчик LinkButton dgPatients_ItemDataBound событий внутри, который использовал это PostBackUrl свойство.

В тот момент , когда я изменил значение LinkButton на а HyperLink , проблема исчезла.