ASP.NET: ModalPopupExtender verhindert das Auslösen des Schaltflächenklickereignisses

Hier ist, was ich versuche zu tun: Klicken Sie auf eine Schaltfläche auf meiner Seite, wodurch wiederum (2) Dinge geschehen:

Zeigen Sie ein ModalPopup an, um zu verhindern, dass der Benutzer Tasten drückt oder Werte ändert.ufen Sie meine Code Behind-Methode auf und verbergen Sie das ModalPopup, wenn Sie fertig sin

Hier ist das ASP-Markup:

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

Nun, hier ist mein Code hinter C # -Code:

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

Warum funktioniert das nicht? Das ModalPopup wird perfekt angezeigt, aber das btnSaveData_Click-Ereignis wird NIE ausgelöst.

AKTUALISIEREN Der erste vorschlag hat bei mir nicht geklappt. Ich habe auch Ihren zweiten Vorschlag ausprobiert (sofern er auf mich zutrifft). Ein kleiner Unterschied ist, dass es auf meinem Modal Panel (pnlHidden) keine Schaltfläche gibt - es ist nur eine Nachricht. Ich habe versucht, JavaScript-Ereignisse auf der Clientseite zu verwenden, die zumindest gleichzeitig mit meinem serverseitigen Ereignis ausgelöst wurden. Das waren gute Nachrichten, aber ich kann den ModalPopupExtender oder seine BehaviorID scheinbar nicht finden oder in den Griff bekommen. Das geht nicht:

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

popup ist IMMER gleich null.

FINAL UPDATE: Dies ist meine endgültige Lösung, um dies zum Laufen zu bringen (Beachten Sie insbesondere die Verwendung von OnClientClick AND 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>

Mit dieser Javascript-Funktion:

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

... und dieser Code dahinter:

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

Antworten auf die Frage(10)

Ihre Antwort auf die Frage