ModalPopupExtender — как показывать только при соблюдении определенных условий?

#sharepoint-2010 #modalpopupextender

#sharepoint-2010 #modalpopupextender

Вопрос:

Я работаю с ModalPopupExtender. Onclick кнопки (которая является TargetControlID ModalPopupExtender), вызывает javascript, который проверяет наличие некоторых условий. Мое требование заключается в том, что я хочу показывать всплывающее окно только в том случае, если определенное условие выполнено, в противном случае скройте его.

Вот код. Функция скрытия здесь не работает. Всплывающее окно появляется, даже если вызвана функция hide().

 function ShowAlert()
{
    if (selBtn == "" || selBtn == null)
    {
        alert("Please select scrip/scheme first");
        var modalPopup = $find('<%=ModalPopupExtender2.ClientID %>');
        if (modalPopup != null)
        {
            modalPopup.hide();
        }
        return false;
    }
}

-----------------------------------------------

<table width="100%" border="0" cellpadding="0" cellspacing="0">
   <tr>
     <td valign="top" align="center">
       <asp:Button ID="btnSet" runat="server" Text="Set Alerts" OnClientClick="ShowAlert();" />
       <cc1:ModalPopupExtender ID="ModalPopupExtender2" runat="server" BehaviorID="ModalBehaviour2" TargetControlID="btnSet" PopupControlID="pnlPopupU" DropShadow="false" X="100" Y="200" BackgroundCssClass="Inactive"></cc1:ModalPopupExtender>
     </td>
   </tr>
</table>
  

Ответ №1:

У меня была похожая ситуация, и я не смог заставить ее работать с Javascript. Вместо этого я выполнил проверку условий и отображение modalpopup на стороне сервера. Решение было не таким чистым, как с javascript на стороне клиента, но, по крайней мере, я заставил его работать и двигался дальше.

 If Condition == true then modalPopUp.Show()
  

В вашей панели pnlPopU поместите кнопку (CancelControlID modalpopupextender) и добавьте к ней событие onclientclick, чтобы скрыть всплывающее окно.

 var modalPopup = $find('<%=ModalPopupExtender2.ClientID %>');
modalPopup.hide();
  

Редактировать:
Еще один обходной путь:
1) Добавьте скрытую кнопку (отображение: отсутствует) и назначьте ее TargetControlID в modalPE
2) В событии щелчка на клиенте btnSet проверьте ваше условие, и если условие выполнено, затем запустите событие щелчка скрытой кнопки (которое запускает режим работы)

Ответ №2:

В коде, лежащем в основе, вы можете сделать:

 if (true)
{
var script = @"Sys.Application.add_load(function() { $find('behavoirIDModal').show(); });";
ScriptManager.RegisterStartupScript(this, GetType(), "ShowPopup", script, true);
}
  

и в aspx вы создаете:

    <asp:Panel runat="server" ID="pnlSalvo">
        <asp:Button ID="btnClose" runat="server" Text="Fechar" />
    </asp:Panel>
    <ajaxToolkit:ModalPopupExtender ID="ModalResultado" BehaviorID="acao" runat="server" PopupControlID="pnlSalvo"
        TargetControlID="btnShow"
        CancelControlID="btnClose">
    </ajaxToolkit:ModalPopupExtender>
    <asp:Button ID="btnShow" runat="server" Text="Modal" Visible="true"  />