处理时更新ASP.NET标签

时间:2009-02-10 04:27:28

标签: c# asp.net ajax

我有一个按钮点击运行的方法,有4个标签。我需要做的是在每个代码块执行后更新标签。我尝试过线程,更新面板等,但似乎无法正常工作。我认为计时器可以正常工作,但只有当你不在方法中时它才会打勾。代码看起来像这样:

private void SomeMethod()
{
     label1.text = "Processing...";
     AnotherMethod();
     label1.text = "Done.";
     label2.text = "Processing...";
     AnotherAnotherMethod();
     label2.text = "Done.";

     //etc...
}

2 个答案:

答案 0 :(得分:5)

您对asp.net的工作方式存在误解。您的服务器代码运行以响应浏览器对完整 html页面的请求。即使您真正想要的是运行一些按钮点击代码,也是如此。无论如何,整个页面必须从头开始重建,即使是在回发上也是如此。这就是Web表单设计的方式。

只要页面呈现给浏览器,页面类的实例就会被销毁。在下一个回发中,您将再次从头开始,除了会话,视图状态和应用程序缓存之外的明显例外。甚至替换了浏览器中页面以前的DOM实例。

因此,当您设置标签的text属性时,您不会直接在浏览器中直接更新任何内容。您所做的只是更新页面类中的一些临时存储。作为执行服务器代码的最后一个阶段,所有这些临时变量都用于呈现已完成的html,并且响应最终被发送到浏览器并显示给用户。

这应该足以让您了解代码无法按预期运行的原因。在任何属性更改进入浏览器之前,它正在运行所有方法中的代码。因此,用户唯一看到的是操作的最终状态。

现在ajax可能会让事情变得复杂一些。使用ajax控件时,您可能不再更新整个页面,但概念仍然适用:发出一个请求,并接收一个响应并用于更新请求的整个上下文。如果你有很多javascript来处理ajax请求的结果,你可以进一步混淆。

不幸的是,您发布的代码没有快速修复。您需要考虑这是如何工作的,并决定您希望页面如何流动。

答案 1 :(得分:1)

你能否将3个方法暴露给客户端脚本然后从客户端代码顺序调用它们,当method1完成客户端脚本会更新ui然后调用method2,依此类推......