Oto, co usiłuję zrobić: Kliknij przycisk na mojej stronie, co z kolei sprawia, że (2) zdziała:ASP.NET: ModalPopupExtender zapobiega przycisk zdarzenie click z wypalania
- obrazu a ModalPopup aby uniemożliwić użytkownikowi naciskając żadnych przycisków lub zmianę wartości
- zadzwonić do mojego kodu za metody ukrywania ModalPopup po zakończeniu
Oto znaczników 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>
Teraz tutaj jest mój kod za kod C#:
protected void btnSaveData_Click(object sender, EventArgs e)
{
UpdateUserData(GetLoggedInUser());
modalPopup.Enabled = false;
}
Dlaczego to nie działa? ModalPopup wyświetla się idealnie, ale zdarzenie btnSaveData_Click NIGDY nie jest uruchamiane.
AKTUALIZACJA: Pierwsza sugestia nie działa dla mnie. Wypróbowałem też twoją drugą sugestię (o ile to dotyczyło mnie). Jedną z niewielkich różnic na moim końcu jest to, że nie ma przycisku na moim panelu modalnym (pnlHidden) - to tylko wiadomość. Próbowałem używać zdarzeń JavaScript po stronie klienta, które przynajmniej wystrzeliły równolegle z moim zdarzeniem po stronie serwera. To była dobra wiadomość, ale nie mogę znaleźć ani uchwycić obsługi ModalPopupExtender ani jej BehaviorID. Nie działa:
function showOverlay() {
var popup = $find('modalPopup');
popup.show();
}
popup jest ZAWSZE równy zeru.
UPDATE KOŃCOWA: To moje ostateczne rozwiązanie dla coraz to do pracy (Take specyficzną nutę wykorzystania OnClientClick I 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>
użyciem tej funkcji javascript:
function showModal() { $find('ShowModal').show(); }
... A ten kod:
protected void btnSaveData_Click(object sender, EventArgs e)
{
UpdateUserData(GetLoggedInUser());
modalPopup.hide();
}
Wiesz co jest dziwne, próbowałem dokładnie tę koncepcję, ale z manekina Buttona zamiast HiddenField . To nie zadziałało (z przyciskiem), ale teraz działa z HiddenField. Pytanie uzupełniające: Wyskakujące okno pokazuje moje wywołanie bazy danych, ale metoda modalPopup.Hide() jest wykonywana zbyt szybko, a wszelkie próby spowolnienia nie powodują wyświetlania okienka. Jakieś pomysły na obejście tego problemu? –
Jeśli chcesz po prostu użyć modalnego wyskakującego okna jak na ekranie "ładowanie", proponuję umieścić go w asp: UpdateProgress. Jeśli idzie szybko, to dobrze? Chcesz go szybko. Oczywiście możesz opóźnić cokolwiek, wykonując System.Threading.Thread.Sleep (2000); (2 sekundy). Nie chcę tego robić. –
Próbowałem System.Threading.Thread.Sleep (2000); zanim opublikowałem mój ostatni komentarz, a kiedy to zrobiłem, modal zniknął całkowicie (nigdy nie pojawił się). Spróbuję kontrolki asp: UpdateProgress. –