这是我正在尝试做的事:点击我页面上的一个按钮,这反过来使(2)事情发生:
这是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>
Run Code Online (Sandbox Code Playgroud)
现在,这是我的C#代码背后的代码:
protected void btnSaveData_Click(object sender, EventArgs e)
{
UpdateUserData(GetLoggedInUser());
modalPopup.Enabled = false;
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?ModalPopup显示完美,但btnSaveData_Click事件永远不会触发.
更新: 第一个建议对我不起作用.我也尝试了你的第二个建议(只要它适用于我).我的一个小的区别是我的模态面板上没有按钮(pnlHidden) - 它只是一条消息.我确实尝试在客户端使用Javascript事件,这至少与我的服务器端事件并发.这是个好消息,但我似乎无法找到或获取ModalPopupExtender或其BehaviorID的句柄.这不起作用:
function showOverlay() {
var popup = $find('modalPopup');
popup.show();
}
Run Code Online (Sandbox Code Playgroud)
popup总是等于null.
最终更新: 这是我的最终解决方案(请特别注意使用OnClientClick和OnClick):
<asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="true"
UpdateMode="Always">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSaveData" …Run Code Online (Sandbox Code Playgroud) 目前,我正在做的是:
这一切都工作,但OnprintToolStripButtonClick事件仍在将文档发送到默认打印机,然后用户选择实际的打印机并单击打印(这有效,但是他们首先从默认打印机上获得额外的副本处理程序).
我可以删除这个内置的Click处理程序吗?我已经尝试了这里提到的其他方法,关于使用EventHandlerList来删除处理程序,但它不适用于内置打印事件.以下是我当前代码的副本,以防有助于澄清:
// ... Irrelevant code before this
private PrintPreviewDialog ppdlg;
ToolStrip ts = new ToolStrip();
ts.Name = "wrongToolStrip";
foreach (Control ctl in ppdlg.Controls)
{
if (ctl.Name.Equals("toolStrip1"))
{
ts = ctl as ToolStrip;
break;
}
}
ToolStripButton printButton = new ToolStripButton();
foreach (ToolStripItem tsi in ts.Items)
{
if (tsi.Name.Equals("printToolStripButton"))
{
printButton = tsi as ToolStripButton;
}
}
printButton.Click += new EventHandler(this.SelectPrinterAfterPreview);
// ... Irrelevant code afterwards omitted
// Here is the Handler for choosing a Printer …Run Code Online (Sandbox Code Playgroud) 从本质上讲,这就是我面临的问题:
我应该将InventTrans数据源设置为AllowEdit = Yes然后痛苦地将数据源中的40多个字段更改为AllowEdit = No,或者有没有办法以编程方式迭代数据源的字段并按名称设置此属性?(请说有,或者同样简单的方法来做到这一点!)
提前致谢!