当前位置: 首页 > 面试题库 >

ASP.NET:ModalPopupExtender防止触发按钮单击事件

袁永贞
2023-03-14
问题内容

这是我想做的事情:单击页面上的一个按钮,这又使(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事件从不触发。

更新: 第一个建议对我不起作用。我还尝试了您的第二个建议(适用于我的建议)。我这方面的一个小区别是我的模式面板(pnlHidden)上没有按钮-
只是一条消息。我确实尝试过在客户端使用Javascript事件,至少与服务器端事件同时触发。这是个好消息,但我似乎找不到或抓住ModalPopupExtender或其BehaviorID的句柄。这不起作用:

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

弹出窗口始终等于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();
}

问题答案:

试试这个。

创建一个虚拟的隐藏字段:

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

在您的Modal Popup声明中设置TargetcontrolID =“ hdnField”。

在您的btnSaveData_Click事件中,执行以下操作:

modalPopup.Show();


 类似资料:
  • 问题内容: 似乎是一个简单的问题,但解决其他问题的方法似乎对我没有用。 试图通过单击按钮来触发AJAX请求,但似乎并未触发。 HTML示例 javascript 问题答案: 您拥有的代码在拨弄中工作得很好。初始页面加载后,按钮是否通过AJAX动态呈现? 用 代替

  • 问题内容: 考虑以下代码段: 现在,假设外部div有一个与之关联的活动对象。我如何确保在内部任何地方都不会触发直播? 编辑: 这是要求的JS 单击“ .inner-div”时不应触发此操作 问题答案: 您必须向内部子级添加事件侦听器,并取消事件的传播。 在普通JS中,类似 要么

  • PayPal Checkout按钮点击本身打开PayPal安全窗口,其余工作正常。当客户点击第一个单选按钮时,我想再次打开PayPal安全窗口,即触发点击PayPal结账按钮。如果按钮本身出现在iframe中,而我无法触发该按钮跨域的单击事件,我该怎么做?有没有办法触发签出按钮的点击? 这里是超文本标记语言代码: 和Javascript代码: 编辑:作为一个工作的例子,我会建议这个网站,但这是有点

  • 我找到了其他相关的问题,但没有一个答案实际上解决了我的问题。这个按钮在IE上很好用,但在Chrome上不行。我尝试移除span元素,将按钮放在任何其他标记之外,但仍然触发了两次。这个temple扩展了一个'base.html'文件,代码位于'main'元素中。 HTML: jQuery:

  • 我在一个页面上有两个GridView,每个GridView都在代码隐藏中被修改为使用RowDataBound进行分组,在RowDataBound中,我为每个分组添加了一个文本框和按钮。该按钮将添加一个单击事件。此外,每个GridView都位于UpdatePanel中。 为了解决RowDataBound项和动态控件的回发问题,我添加了一个简单的响应。重定向到同一页。这段代码可以工作,但按钮会在Gri

  • 我有一个包含几个引导模式的页面,其中包括: 问题是,我有一整行可以点击的表格,比如 模态内容在下面的另一个隐藏表行中,后面跟着下一个可单击的行,依此类推。现在,这一行还包含一个按钮,单击后将转到另一个页面。 我需要整行可点击,以便它打开模式,除非点击了转到其他页面的按钮,然后我需要停止打开模式。 我需要这样的东西 但针对这一点: 我还尝试给TR一个类"modaltoggle",然后用javascr