【问题标题】:Updating ASP.NET label while processing处理时更新 ASP.NET 标签
【发布时间】:2009-02-10 04:27:28
【问题描述】:

我有一个在单击按钮时运行的方法,带有 4 个标签。我需要做的是在每个代码块执行后更新一个标签。我已经尝试过线程、更新面板等,但似乎无法正常工作。我认为计时器会起作用,但它只会在你不在方法中时才会滴答作响。代码如下所示:

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

     //etc...
}

【问题讨论】:

    标签: c# asp.net ajax


    【解决方案1】:

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

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

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

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

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

    很遗憾,您发布的代码没有快速修复方法。您需要考虑其真正的工作原理,并决定您希望页面如何流动。

    【讨论】:

      【解决方案2】:

      您能否将这 3 个方法公开给客户端脚本,然后从客户端代码顺序调用它们,当方法 1 完成时,客户端脚本会更新 ui 然后调用方法 2,依此类推...

      【讨论】:

        猜你喜欢
        • 2010-10-08
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-21
        • 1970-01-01
        相关资源
        最近更新 更多