ModalPopupExtender OK Событие нажатия кнопки не запускается? - PullRequest
43 голосов
/ 27 сентября 2008

У меня есть кнопка внутри UpdatePanel. Кнопка используется в качестве кнопки OK для ModalPopupExtender. По какой-то причине событие нажатия кнопки не срабатывает. Есть идеи? Я что-то упустил?

<asp:updatepanel id="UpdatePanel1" runat="server">
    <ContentTemplate>
        <cc1:ModalPopupExtender ID="ModalDialog" runat="server" 
            TargetControlID="OpenDialogLinkButton"
            PopupControlID="ModalDialogPanel" OkControlID="ModalOKButton"
            BackgroundCssClass="ModalBackground">
        </cc1:ModalPopupExtender>
        <asp:Panel ID="ModalDialogPanel" CssClass="ModalPopup" runat="server">
            ...
            <asp:Button ID="ModalOKButton" runat="server" Text="OK" 
                        onclick="ModalOKButton_Click" />
        </asp:Panel>
    </ContentTemplate>
</asp:updatepanel>

Ответы [ 8 ]

53 голосов
/ 22 июля 2009

Aspx

<ajax:ModalPopupExtender runat="server" ID="modalPop" 
            PopupControlID="pnlpopup" 
            TargetControlID="btnGo"
              BackgroundCssClass="modalBackground"
             DropShadow="true"
             CancelControlID="btnCancel" X="470" Y="300"   />


//Codebehind    
protected void OkButton_Clicked(object sender, EventArgs e)
    {

        modalPop.Hide();
        //Do something in codebehind
    }

И не устанавливайте кнопку ОК в качестве OkControlID.

9 голосов
/ 27 сентября 2008

Похоже, что кнопка, которая используется как кнопка ОК или ОТМЕНА для ModalPopupExtender, не может иметь событие щелчка. Я проверил это, удалив

OkControlID="ModalOKButton"

из тега ModalPopupExtender, и нажатие кнопки срабатывает. Мне нужно найти другой способ отправки данных на сервер.

8 голосов
/ 10 июня 2009

Возможно также, что кнопка должна иметь CausesValidation = "false". Это сработало для меня.

6 голосов
/ 21 декабря 2008

Я просто искал решение для этого:)

похоже, что вы не можете назначить OkControlID элементу управления, если вы хотите, чтобы этот элемент управления вызвал событие, просто удалив это свойство, я снова все заработал.

мой код (рабочий):

<asp:Panel ID="pnlResetPanelsView" CssClass="modalPopup" runat="server" Style="display:none;">
    <h2>
        Warning</h2>
    <p>
        Do you really want to reset the panels to the default view?</p>
    <div style="text-align: center;">
        <asp:Button ID="btnResetPanelsViewOK" Width="60" runat="server" Text="Yes" 
            CssClass="buttonSuperOfficeLayout" OnClick="btnResetPanelsViewOK_Click" />&nbsp;
        <asp:Button ID="btnResetPanelsViewCancel" Width="60" runat="server" Text="No" CssClass="buttonSuperOfficeLayout" />
    </div>
</asp:Panel>
<ajax:ModalPopupExtender ID="mpeResetPanelsView" runat="server" TargetControlID="btnResetView"
    PopupControlID="pnlResetPanelsView" BackgroundCssClass="modalBackground" DropShadow="true"
    CancelControlID="btnResetPanelsViewCancel" />
4 голосов
/ 12 февраля 2010

Поместите в Button-Control атрибут «UseSubmitBehavior = false».

2 голосов
/ 24 ноября 2010

Я часто использую пустую метку в качестве TargetControlID. ех. <asp:Label ID="lblghost" runat="server" Text="" />

Я видел две вещи, которые не вызывают срабатывание события щелчка:
1. Вы должны удалить OKControlID (как уже упоминалось)
2. Если вы используете валидаторы полей, вы должны добавить CausesValidation = "false" на кнопку.

Оба сценария вели себя одинаково для меня.

2 голосов
/ 28 января 2009

Ни один из предыдущих ответов не работал для меня. Я вызвал обратную передачу кнопки на событие OnOkScript.

<div>
    <cc1:ModalPopupExtender PopupControlID="Panel1" 
         ID="ModalPopupExtender1"
         runat="server" TargetControlID="LinkButton1" OkControlID="Ok" 
         OnOkScript="__doPostBack('Ok','')">
    </cc1:ModalPopupExtender>

    <asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton> 
</div>        


<asp:Panel ID="Panel1" runat="server">
    <asp:Button ID="Ok" runat="server" Text="Ok" onclick="Ok_Click" />            
</asp:Panel>   
1 голос
/ 09 июня 2016

Я нашел способ проверить модалпопап без обратной передачи.

В ModalPopupExtender я устанавливаю OnOkScript для функции, например, ValidateBeforePostBack (), затем в функции, которую я вызываю Page_ClientValidate для нужной группы валидации, делаю проверку, и в случае неудачи сохраняю показ modalpopup. Если это пройдет, я звоню __doPostBack.

function ValidateBeforePostBack(){ 
     Page_ClientValidate('MyValidationGroupName'); 
     if (Page_IsValid) { __doPostBack('',''); } 
     else { $find('mpeBehaviourID').show(); } 
}
...