为什么label.Text在服务器中设置但在网页上没有变化?

时间:2011-11-04 10:13:02

标签: c# asp.net

我希望服务器在网页上显示一些文字。

我定义了

  <asp:Label id="label1" runat="server" />

并设置

protected void Button1_Click(object sender, EventArgs e)
    {
        label1.Text = "bla";
        timer = new System.Threading.Timer(new TimerCallback(DoSomething), null, 0, 10000);        
    }

    private void DoSomething(object obj)
    {
       label1.Text = "bla 1";
    }
提出了bla,但不是bla1。 当我调试时,我看到执行“bla 1”行。 我哪里做错了?

5 个答案:

答案 0 :(得分:3)

当DoSomething()执行时,响应已经发送到浏览器,您的代码什么都不做。实际上,我很惊讶你不要用它来破坏app域。

您不应该尝试在asp.net应用程序中使用这样的线程原语。

如果您希望在显示初始页面之后的某个时间更新值,则需要查看Ajax。

答案 1 :(得分:0)

我认为在发送页面响应之前新计时器没有完成。线程可能会抛出错误而只是关闭。

答案 2 :(得分:0)

您不能异步更改另一个线程中的标签,一旦将响应发送回浏览器,那么您在服务器上执行的任何操作都不会产生任何影响。您需要使用javascript进行客户端ujpdates。

答案 3 :(得分:0)

ASP.Net在服务器上运行代码并将结果反馈回浏览器,一旦完成,服务器上发生的任何事情都不会对浏览器中的html产生任何影响。

答案 4 :(得分:0)

原因是当您单击按钮时发生请求/响应过程。 您的线程没有以任何方式刷新页面或其片段。

可能你可以通过websockets或ajax long pooling获得所需的结果 - 使用彗星。