2010-02-01 108 views
0

我对我正在处理的一个Web表单有一个奇怪的问题,这似乎与一些正在进行的异步事件有关。基本上,我需要执行以下操作:ASP.NET同步问题

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

此代码全部作为单击WebForm上的按钮的结果运行。对GetResults(ResultsSet)的调用很长,因此需要显示面板ProgressPanel。问题在于,在我的ProgressPanel实际显示之前,发生了对GetResults的调用。如果我将GetResults和后面的行注释掉,那么ProgressPanel就不会出现问题。在GetResults调用发生之前,如何强制前两行执行并显示在页面上?

回答

1

这听起来像你需要使用UpdateProgress控制,而不是试图触发你自己的。当单击表单按钮时,在向客户端发送任何响应之前,服务器端单击处理器上的所有代码都会运行。

你需要这样的事情,而不是你ProgressPanel:

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

    </ProgressTemplate> 
</asp:UpdateProgress> 

ProgressTemplate的内容会自动显示了when异步回发开始,然后将隐藏一旦它完成。

要隐藏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" /> 
+0

我看到如何工作 - 但问题是,我仍然需要隐藏UserInput面板,以便用户不能更新时发生混乱。 – piratepops 2010-02-01 18:29:20

+0

我已经添加了一个如何隐藏'UserInput'面板的例子。 – jball 2010-02-01 18:48:53