2008-09-27 2 views
42

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

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

ответ

52

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 
    } 

не установить кнопку OK, как OkControlID.

9

Оказывается, что кнопка, которая используется в качестве OK или кнопку CANCEL для ModalPopupExtender не может иметь событие щелчка. Я проверил это путем удаления

OkControlID="ModalOKButton" 

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

6

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

кажется, что вы не можете иметь 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" /> 
2

Ни один из предыдущих ответов работал для меня. Я вызвал обратную передачу кнопки на событии 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> 
+0

Если вы удалите OKControlID из вашего ModalPopupExtender, кнопка будет возвращена как обычно. В вашем случае вы можете вызвать ModalPopupExtender.Hide(), чтобы скрыть всплывающее окно. – 2009-01-28 19:37:05

7

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

+1

OMG, что сработало. Моя проблема не имела ничего общего с кнопкой OK, но обычный старый щелчок кнопки не отправлялся. – DOK 2011-04-27 18:54:14

+0

Итак, как насчет того, когда CausesValidation должен быть «истинным»? Установка его на «false» решает одну проблему, но вызывает другое ... – 2011-09-09 14:43:23

4

Вставить в Button-Control атрибут «UseSubmitBehavior = false».

3

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

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

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

1

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

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

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

Надеюсь, что это поможет.

Смежные вопросы