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

时间:2009-07-22 19:33:58

标签: asp.net ajax ajaxcontroltoolkit

我有一个带有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()

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

2 个答案:

答案 0 :(得分:1)

我认为你需要做的是将对话框的显示和数据提取的绑定分开。

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

  1. 显示对话框和旋转线程以获取数据。 (该线程会将数据放入会话缓存中,或者将自定义缓存放在数据库中。)
  2. 如果数据可用,请让客户端轮询服务器(可能使用对静态页面方法的AJAX调用)。
  3. 当数据可用时,隐藏对话框并执行数据绑定。
  4. 您可以在线程启动时添加其他检查/条件,以便在用户多次按下搜索时不会启动太多线程。即如果他们没有更改搜索条件,则不要开始新搜索,只是继续轮询。

答案 1 :(得分:0)

看起来你试图显示整页回复的进度面板(模态弹出窗口)? 如果搜索操作在updatepanel

中完成,mdlPopup.Show()将起作用

在您的方案中,请尝试此操作   - 步骤1,将modalpopupextender的TargetControlID设置为虚拟隐藏控件   - 第2步,添加了javascript调用,显示了modalpopup $ find('mdlPopup')。show();在搜索按钮的onclient事件的回拨之前(就像在回发之前添加验证一样)

詹姆斯