ASP.NET: ModalPopupExtender препятствует тому, чтобы событие нажатия кнопки стреляло

Вот то, что я пытаюсь сделать: Нажмите кнопку на моей странице, которая в свою очередь делает (2), вещи происходят:

  1. Отобразите ModalPopup, чтобы препятствовать тому, чтобы пользователь нажал любые кнопки или изменил значения
  2. Назовите мой код позади метода, скрыв ModalPopup по окончании

Вот разметка ASP:

<asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="true"
    UpdateMode="Always">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnSaveData" EventName="Click" />
    </Triggers>
    <ContentTemplate>
        <asp:Panel ID="pnlHidden" runat="server" style="display: none;">
            <div>
            <h1>Saving...</h1>
            </div>
        </asp:Panel>
        <cc1:ModalPopupExtender ID="modalPopup"
            BackgroundCssClass="modalBackground" runat="server"
            TargetControlID="btnSaveData" PopupControlID="pnlHidden"
            BehaviorID="ShowModal">
        </cc1:ModalPopupExtender>
        <asp:Button ID="btnSaveData" runat="server" Text="Save Data"
            OnClick="btnSaveData_Click" />
    </ContentTemplate>
</asp:UpdatePanel>

Теперь, вот мой код позади кода C#:

protected void btnSaveData_Click(object sender, EventArgs e)
{
   UpdateUserData(GetLoggedInUser());
   modalPopup.Enabled = false;
}

Почему это не работает? ModalPopup отображается отлично, но btnSaveData_Click огни события NEVER.

ОБНОВЛЕНИЕ: первое предложение не работало на меня. Я также попробовал Ваше второе предложение (поскольку оно относилось ко мне). Незначительные различия на моем конце - то, что нет никакой кнопки на моей модальной панели (pnlHidden) - это - просто сообщение. Я действительно пытался использовать события JavaScript на стороне клиента, которая, по крайней мере, стреляла одновременно с моим событием серверной стороны. Это было хорошими новостями, но я, может казаться, не нахожу или не захватываю дескриптор на ModalPopupExtender или его BehaviorID. Это не работает:

function showOverlay() {
    var popup = $find('modalPopup');
    popup.show();
}

всплывающее окно ВСЕГДА равно пустому указателю.

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ: Это - мое конечное решение для того, чтобы заставлять это работать (Обратите определенное внимание на использование OnClientClick И OnClick):

<asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="true"
UpdateMode="Always">
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="btnSaveData" EventName="Click" />
</Triggers>
<ContentTemplate>
    <asp:Panel ID="pnlHidden" runat="server" style="display: none;">
        <div>
        <h1>Saving...</h1>
        </div>
    </asp:Panel>
    <cc1:ModalPopupExtender ID="modalPopup"
        BackgroundCssClass="modalBackground" runat="server"
        TargetControlID="hdnField" PopupControlID="pnlHidden"
        BehaviorID="ShowModal">
    <asp:HiddenField ID="hdnField" runat="server" />
    </cc1:ModalPopupExtender>
    <asp:Button ID="btnSaveData" runat="server" Text="Save Data"
        OnClientClick="showModal();" OnClick="btnSaveData_Click" />
    </ContentTemplate>
</asp:UpdatePanel>

Используя эту функцию JavaScript:

function showModal() { $find('ShowModal').show(); }

... И этот код позади:

protected void btnSaveData_Click(object sender, EventArgs e)
{
   UpdateUserData(GetLoggedInUser());
   modalPopup.hide();
}
15
задан C. Griffin 27 May 2010 в 13:29
поделиться

2 ответа

Попробуйте это.

Создайте фиктивное скрытое поле:

<asp:HiddenField ID="hdnField" runat="server" />

Установите TargetcontrolID = "hdnField" в объявлении модального всплывающего окна.

В событии btnSaveData_Click сделайте следующее:

modalPopup.Show();
15
ответ дан 1 December 2019 в 03:34
поделиться

Первая попытка: попробуйте установить свой ButtonID в теге OkControlID и повторите попытку

ИЛИ

Вторая попытка: вызовите свое мероприятие через javascript, похоже, возникли некоторые проблемы с событиями щелчка

<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
ответ дан 1 December 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: