這裏是我想要做的事:點擊我的頁面,這反過來又使(2)事情發生在一個按鈕:ASP.NET:ModalPopupExtender阻止按鈕單擊事件從發射
- 顯示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事件。
更新:第一個建議對我不起作用。我也嘗試了你的第二個建議(只要它適用於我)。我的一個小小的區別是,我的模式面板上沒有按鈕(pnlHidden) - 這只是一條消息。我曾嘗試在客戶端使用Javascript事件,它至少在我的服務器端事件中同時觸發。這是個好消息,但我似乎無法找到或抓住ModalPopupExtender或其BehaviorID的句柄。這是行不通的:
function showOverlay() {
var popup = $find('modalPopup');
popup.show();
}
popup總是等於null。
最後更新:這是我得到這個工作(採取具體的使用注意事項的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();
}
你知道什麼是奇怪的,我想這個確切的概念,但與虛擬按鈕,而不是一個HiddenField 。這不起作用(使用Button),但現在它可以使用HiddenField。後續問題雖然:彈出窗口顯示,我的數據庫調用已完成,但modalPopup.Hide()執行得太快,而任何試圖減慢它的嘗試都不會顯示彈出窗口。任何解決方法的想法? – 2010-05-21 18:02:02
如果您只是想像使用「加載」屏幕一樣使用模式彈出窗口,我建議將其放入asp:UpdateProgress中。如果速度很快,那很好嗎?你有點想要它快速。當然你可以通過做System.Threading.Thread.Sleep(2000)來延遲任何事情; (2秒)。我確定不建議這樣做。 – 2010-05-21 19:58:11
我試過了System.Threading.Thread.Sleep(2000);在我發表我最後的評論之前,當我這樣做時,模態完全消失(從未彈出)。我會嘗試asp:UpdateProgress控件。 – 2010-05-24 15:12:46