【问题标题】:How do I show a modal dialog while the databind occurs?发生数据绑定时如何显示模式对话框?
【发布时间】:2009-07-22 19:33:58
【问题描述】:

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

作为临时解决方案,我想显示一个进度条,我找到了使用 ASP.NET AJAX ModalPopupExtender 的解决方案。

这是我将扩展器添加到页面的代码:

<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>

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

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

问题是,当我单击“搜索”按钮时,会弹出模式对话框,但永远不会调用 Databind() 方法。我尝试使用mdlPopup.Show(),但没有显示对话框,而是运行Databind()

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

【问题讨论】:

    标签: asp.net ajax ajaxcontroltoolkit


    【解决方案1】:

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

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

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

    您可以在线程启动时设置额外的检查/条件,以便在用户多次按下搜索时您不会启动太多线程。 IE。如果他们没有更改搜索条件,则不要开始新的搜索,而是继续轮询。

    【讨论】:

      【解决方案2】:

      您似乎尝试为整页回发显示进度面板(模式弹出窗口)? 如果在更新面板中完成搜索操作,mdlPopup.Show() 将起作用

      在你的场景中,试试这个 - 第一步,将modalpopupextender的TargetControlID设置为一个虚拟隐藏控件 - 第 2 步,添加显示 modalpopup 的 javascript 调用 $find('mdlPopup').show();在搜索按钮的 onclient 事件的回发调用之前(就像在回发之前添加验证一样)

      詹姆斯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 2012-06-27
        • 2020-10-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多