在长代码隐藏过程中更改标签文本

本文关键字:标签 文本 过程中 代码 隐藏 | 更新日期: 2023-09-27 18:28:00

我有LabelButton在一个UpdatePanel中,现在我用ForEach循环调用Long Process On Button Click我想要的是在循环完成后更新Label的文本。有什么简单的方法可以在运行时更改Label的文本吗。我听说我们可以用Iframe做这件事,但我对此一无所知。

代码

aspx

    <asp:UpdatePanel ID="UpdatePanelUpdate" runat="server" UpdateMode="Conditional">     <ContentTemplate>
    <div>
    <asp:Button ID="ButtonUpdate" runat="server" Text="Update" 
        onclick="ButtonUpdate_Click" />
    <br />
    <br />
   <asp:Label ID="LabelUpdateCount" runat="server" Text=""></asp:Label>
    < /div>
   </ContentTemplate>
   </asp:UpdatePanel>

aspx.cs

    protected void ButtonUpdate_Click(object sender, EventArgs e)
{
     int count = 0;
    foreach()
    {
        do my stuff();
        count = count + 1;
        LabelUpdateCount.Text = count.ToString();

    }
}

所以,我想在运行时显示标签的更改。。。。。

在长代码隐藏过程中更改标签文本

如果我做对了,服务器只在方法完成后返回,但您希望客户端标签在完成时显示当前已完成的项目计数。

我想提一下它的一个问题。每次回复大约需要200-400毫秒,所以它不会很快更新。我强烈建议考虑每隔一段时间更新一次,而不是尝试为完成的每一项工作进行更新。

为了实现这一点,您必须在不同的线程上运行函数循环(让它修改一个变量)。Add让客户端使用js定时器检查其状态(返回变量的值)。

换句话说,你要做的就是向客户展示进度。在这种情况下,以下链接可能很有用。

使用ASP.NET AJAX 的实时进度条

注意:它返回百分比。您可以将其更改为返回计数的方式。

以上链接取自以下问题。这在很多方面都是相关的问题。

ASP.NET AJAX进度条:从代码隐藏更新?

MyLabel.Text = "The process has completed.";

只需确保此标签也包含在更新面板中,并且当进程在服务器端完成并返回到客户端时,它应该进行更新。

这应该相当简单。

示例:

protected void button1_Click(object sender, EventArgs e)
{
    foreach (var a in loopItems)
    {
        DoMyWork(a);
    }
    label1.Text = "Complete";
}