从服务器端使用弹出窗口时的BlockUI

omr*_*n12 7 asp.net jquery colorbox

我在一个漫长的过程中使用UpdatePanel来阻止UI,我的问题就是当我放一个简单的按钮时它会起作用,但是当按钮在弹出窗口内时它不起作用(只是被卡住,直到过程完成而没有阻止ui).

有效的代码:

<asp:UpdatePanel runat="server" ID="updatePanel">
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="lb_start" />
  </Triggers>
  <ContentTemplate>
      <asp:UpdateProgress runat="server" ID="upprogress" AssociatedUpdatePanelID="updatePanel" DisplayAfter="0">
            <ProgressTemplate>
                <div style="position: fixed; text-align: center; height: 100%; width: 100%; top: 0; right: 0; left: 0; z-index: 9999999; background-color: #000000; opacity: 0.7;">
                    <asp:Image ID="imgUpdateProgress" runat="server" ImageUrl="~/images/iguloader-yashar.gif" AlternateText="Loading ..." ToolTip="Loading ..." Style="padding: 10px; position: fixed; top: 45%; left: 50%;" />
                </div>
            </ProgressTemplate>
        </asp:UpdateProgress>
        <asp:LinkButton runat="server" ID="lb_start" class="btn btn-success" OnClick="lb_start_Click"><i class="fa fa-start"></i> Start</asp:LinkButton>            
  </ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

服务器端:

protected void lb_start_Click(object sender, EventArgs e)
{
    //long process
}
Run Code Online (Sandbox Code Playgroud)

无法使用的代码(使用colorbox.js):

<asp:UpdatePanel runat="server" ID="updatePanel">
  <Triggers>
    <asp:AsyncPostBackTrigger ControlID="lb_start" />
  </Triggers>
  <ContentTemplate>
      <asp:UpdateProgress runat="server" ID="upprogress" AssociatedUpdatePanelID="updatePanel" DisplayAfter="0">
            <ProgressTemplate>
                <div style="position: fixed; text-align: center; height: 100%; width: 100%; top: 0; right: 0; left: 0; z-index: 9999999; background-color: #000000; opacity: 0.7;">
                    <asp:Image ID="imgUpdateProgress" runat="server" ImageUrl="~/images/iguloader-yashar.gif" AlternateText="Loading ..." ToolTip="Loading ..." Style="padding: 10px; position: fixed; top: 45%; left: 50%;" />
                </div>
            </ProgressTemplate>
        </asp:UpdateProgress>
        <a runat="server" id="a_start" class="inline" href="#startModal" title="Start scan"><span  class="btn btn-success"><i class="fa fa-play"></i></span></a>        
  </ContentTemplate>
</asp:UpdatePanel>

<div id="startModal" style="padding:10px; background:#fff;">
    <h2>Start Scan</h2>
    Click ok to continue:
        <asp:LinkButton runat="server" ID="lb_start" class="btn btn-success" OnClick="lb_start_Click"><i class="fa fa-start"></i> Start</asp:LinkButton>
</div>
Run Code Online (Sandbox Code Playgroud)

尝试玩了一点,任何想法?

Tyl*_*den 2

您可以使用名为 blockui(足够有趣)的 jQuery 插件来完成此任务。

此链接显示了一个示例:https ://gist.github.com/whoshotjr/3010693

只需包含http://malsup.com/jquery/block/中提供的 jquery.blockui.js

然后将此代码包含在您的项目中:

<script type="text/javascript">
        Page = Sys.WebForms.PageRequestManager.getInstance();
        Page.add_beginRequest(OnBeginRequest);
        Page.add_endRequest(endRequest);

        function OnBeginRequest(sender, args) {
            $.blockUI();
        }
        function endRequest(sender, args) {
            $.unblockUI();
        }

 </script>
Run Code Online (Sandbox Code Playgroud)

由于您正在运行客户端,因此在执行 Web 请求时几乎总是必须使用 Javascript 来阻止 UI。我在 MVC 中使用了与此类似的设置,但最终都是相同的。希望这可以帮助!