在一个函数中多次更新屏幕元素

时间:2010-01-07 16:07:53

标签: c# asp.net

这一定很容易,但让我感到难过。

如何在一个功能中多次更改屏幕上的元素?

我想在我的函数开头更改标签以读取类似“开始......”的内容,然后离开并做一些事情,然后在最后将标签更改为“已完成”。

作为说明,为什么以下代码:

        errorMessage.Text = "Three...";
        System.Threading.Thread.Sleep(1000);
        errorMessage.Text = "Two...";
        System.Threading.Thread.Sleep(1000);
        errorMessage.Text = "One...";
        System.Threading.Thread.Sleep(1000);
        errorMessage.Text = "Go!";
        System.Threading.Thread.Sleep(1000);

暂停4秒钟,然后将标签文字更改为“Go!”而不是倒计时?

TIA

5 个答案:

答案 0 :(得分:3)

如果您想对进程进行计时并将结果输出到标签,则应在函数中使用字符串。尝试这样的事情:

string countDownTimes = "";
countDownTimes += String.Format("One at: {0}, ",DateTime.Now.ToString());
System.Threading.Thread.Sleep(1000); 
countDownTimes += String.Format("Two at: {0}, ",DateTime.Now.ToString());
//etc..
errorMessage.Text = countDownTimes;

如果您希望以增量方式更新UI按钮,那么您应该查看javascript解决方案或异步更新。

答案 1 :(得分:2)

您的代码仅更新屏幕一次的原因是它在单个回发中运行。在回发结束时,HTML呈现在返回浏览器中以供显示。

在回发期间多次更新页面,实际上 不容易。但是对于你正在做的事情,有一个更简单的解决方案。使用JavaScript在请求开头将标题更改为“正在开始...”,然后让方法返回“完成”。

答案 2 :(得分:1)

因为它是一个网页,最终的值是发送到浏览器的内容。所有服务器端代码都会执行,然后将最终值发送给浏览器。

您的代码正在使用服务器上的新值更新控件,但客户端不会看到它。要执行您想要的操作,您必须通过客户端脚本(javascript)更新控件,或者必须刷新页面并显示更新的值。

这是asp.net页面生命周期的链接,这是你要问的问题。

http://msdn.microsoft.com/en-us/library/ms178472.aspx

如果您注意到Render方法之前没有任何内容发送到浏览器。

答案 3 :(得分:1)

您需要了解网络的运作方式;

  1. 浏览器从服务器请求页面
  2. 服务器发送页面(可能会执行某些服务器端处理,如ASP.net)
  3. 客户端显示页面并在页面上运行javascripts
  4. 然后这些javascripts可能会在加载后更改页面,但第2步无法更改已经发送给客户端的内容。

答案 4 :(得分:0)

如果是ASP.NET,所有代码都会在将html发送到浏览器之前执行,因此只会显示最后一个值。如果你想在客户端这样做,你将不得不做一些javascript。