ASP.NET同步问题

时间:2010-02-01 18:12:10

标签: asp.net vb.net

我正在处理一个与我正在处理的网络表单有一个奇怪的问题,这似乎与一些异步的东西有关。基本上,我需要做以下事情:

UserInputPanel.Visible = False
ProgressPanel.Visible = True
ResultsSet = New DataSet()
GetResults(ResultsSet)
FillOutput()
ProgressPanel.Visible = False
OutputPanel.Visible = True

此代码全部由于单击WebForm上的按钮而运行。对GetResults(ResultsSet)的调用是一个冗长的调用,因此需要显示面板ProgressPanel。问题是,GetResults的调用是在我的ProgressPanel实际显示之前发生的。如果我注释掉对GetResults的调用以及后面的行,那么ProgressPanel会显示没有问题。在调用GetResults之前,如何强制前两行执行并显示在页面上?

1 个答案:

答案 0 :(得分:1)

听起来您需要使用UpdateProgress控件而不是尝试触发自己的控件。单击表单按钮后,服务器端的所有代码单击处理程序将在任何响应发送到客户端之前运行。

你需要这样的东西而不是你的ProgressPanel:

 <asp:UpdateProgress ID="UpdateProgress1" runat="server">
    <ProgressTemplate>

    </ProgressTemplate>
</asp:UpdateProgress>

当异步回发开始时,ProgressTemplate的内容将自动显示,然后在完成后隐藏。

要隐藏UserInputPanel,请创建如下的javascript函数(使用jQuery或其他一些客户端js框架来获得更强大的跨浏览器代码):

function hideUserInput() {
    document.getElementById('<%=UserInputPanel.ClientID%>').style.visibility="hidden"; 
}

并将此功能附加到按钮的OnClientClick属性:

<asp:button id="YourButton"
       text="Submit"
       onclientclick="hideUserInput()"
       runat="server" onclick="YourButton_Click" />