代码之家  ›  专栏  ›  技术社区  ›  Robert S.

数据绑定发生时如何显示模式对话框?

  •  2
  • Robert S.  · 技术社区  · 15 年前

    我有一个带有GridView的表单,它绑定到一个复杂的存储过程(财务数据)。此查询运行和加载GridView大约需要3分钟。用户不耐烦,反复点击“搜索”,只会让事情变得更糟。

    作为临时解决方案,我想显示一个进度条,我发现了一个使用ASP.NET Ajax ModalPopExtender的解决方案。

    这是我用于将扩展程序添加到页面的代码:

    <ajaxToolkit:ModalPopupExtender ID="mdlPopup" runat="server" TargetControlID="Button1"
        PopupControlID="pnlPopup" BackgroundCssClass="modalBackground" />
    <asp:Panel ID="pnlPopup" runat="server" CssClass="updateProgress" style="display: none">
        <div align="center" style="margin-top: 13px;">
            <img src="../images/progress.gif" alt="Progress" />
            <span class="updateProgressMessage">Loading ...</span>
        </div>
    </asp:Panel>
    

    这是按钮的Click事件的非常简单的代码:

    protected void Button1_Click(object sender, EventArgs e)
    {
        gvInvoice.DataBind();
    }
    

    问题是,当我单击搜索按钮时,会弹出模式对话框,但不会调用databind()方法。我试着用 mdlPopup.Show() 但它不显示对话框,而是运行 Databind() .

    我错过了什么?如何确保模式对话框出现、数据绑定运行以及模式对话框随后消失?

    2 回复  |  直到 15 年前
        1
  •  0
  •   James Tsai    15 年前

    看起来您试图显示进度面板(模式弹出窗口)以进行整页回发? 如果在updatepanel中执行搜索操作,则mdlpopup.show()将起作用。

    在你的场景中,试试这个 -步骤1,将modalpopupExtender的TargetControlID设置为虚拟隐藏控件 -步骤2,添加了显示modalpoup$find(“mdlpopup”).show()的javascript调用;在搜索按钮的onclient事件的回拨调用之前(就像在回拨之前添加验证一样)

    詹姆斯

        2
  •  1
  •   David McEwing    15 年前

    我认为您在这里需要做的是将显示对话框和绑定与获取数据分开。

    我可能会用这样的方法来解决这个问题:

    1. 显示对话和旋转线程以获取数据。(线程会将数据放入会话缓存或数据库上的自定义缓存中。)
    2. 让客户机在服务器上轮询数据是否可用(可能使用对静态页面方法的Ajax调用)。
    3. 当数据可用时,隐藏对话框并执行数据绑定。

    您可以在线程启动时添加额外的检查/条件,以便在用户多次按Search时不会启动太多线程。也就是说,如果他们没有更改搜索条件,那么不要开始新的搜索,只需继续轮询。