【问题标题】:ASP.Net Display Different Text in Label Control At IntervalASP.Net 在标签控件中以间隔显示不同的文本
【发布时间】:2010-12-08 04:24:42
【问题描述】:

我在这里有一个用 ASP.Net 2.0 + AJAX 编写的旧 Web 应用程序。

我的页面中有一个文本框控件、一个按钮和一个标签控件,它们位于更新面板内。

文本将被输入到文本框中,随后,在控件的 textchanged 事件中,涉及一些服务器端处理和数据验证。

我使用标签控件作为显示来通知用户验证的进度。标签控件上可能会出现不同的消息。

在当前场景中,标签控件上只显示为标签控件指定的最后一个字符串。

我正在寻找如何在标签控件上显示不同文本的方法,比如以 5 秒为间隔。

那里是否有一个 AJAX 控件(或我可以使用的类似控件),我可以在其中指定要以 n 秒间隔显示的文本?

我如何实现这一目标?投入高度赞赏。谢谢。

已编辑 我想我可能需要重新表述这个问题以使其更简单。

在 asp.net 页面回发后,我如何能够在标签控件中指定不同的文本字符串,每 n 秒后显示一次?

喜欢

Label1.Text = "消息 1"

.. 延迟 5 秒

Label1.Text = "下一条消息"

.. 延迟 5 秒

Label1.Text = "另一条消息"

.. 延迟 5 秒

Label1.Text = "最后一条消息"

在当前的回发模型(包括 AJAX 更新面板)中,只显示最后一条消息。

请多多指教。谢谢。

【问题讨论】:

    标签: asp.net javascript ajax


    【解决方案1】:

    如果标签控件包含在更新面板中,则使用 System.Timers.Timer 调用您的代码

    Dim WithEvents timer As New System.Timers.Timer()
    Dim msgStack As Stack(Of String) = Nothing
    
    Sub DisplayMsg(ByVal msg() As String, ByVal interval As Integer)
        msgStack = New Stack(Of String)
        For i As Integer = 0 To msg.Length - 1
            msgStack.Push(msg(i))
        Next
    
        timer.Interval = interval
        timer.AutoReset = True
        timer.Start()
    End Sub
    
    Private Sub timer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles timer.Elapsed
        If msgStack.Count > 0 Then
            Label1.Text = msgStack.Pop()
        Else
            timer.Stop()
        End If
    End Sub
    

    将您的消息输入列表从最后一个状态消息排序到第一个状态消息

    Sub DoOperation()
        DisplayMsg(New String() {"LastMessage", "Second Message", "First Message"}, 5000)
    End Sub
    

    【讨论】:

    • 试过了,但对我没有用。我肯定错过了什么。请进一步详细说明。谢谢。
    【解决方案2】:

    试试UpdateProgress 控件,它是一个 ASP.NET AJAX 服务器控件,可让您对 UpdatePanel 呈现的进度提供反馈。您可以将其连接到您的标签并更改文本以反映部分回发的进度。

    【讨论】:

    • 这不足以满足我的需要,因为我需要显示的文本来自页面数据的服务器端验证。我需要在特定秒数的不同处使用标签控件(或任何其他控件)专门显示一些消息。例如,我可能需要显示以下文本: 1. 正在处理 2. 数据已验证 3. 用户已通过身份验证 我正在寻找一个控件或函数,我在其中指定要以 n 秒间隔显示的消息,类似于:函数DisplayMsg(Msg1 为字符串, Msg2 为字符串, Msg3 为字符串, 间隔为整数)
    【解决方案3】:

    如果您只需要显示与实际情况没有真正联系的静态文本,那么像这样的简单 javascript 可能就足够了:

    var i = 0;
    var strings = new Array("authenticating", "validating", "1", "2", "3", "4", "5");
    var id = setInterval(function() 
      {
         document.getElementById('label').innerHTML = strings[i];
         i++;
         if (i > strings.length - 1) {clearInterval(id)} 
      }, 5000);
    

    但是,如果您需要它来显示实际情况,那么我建议您使用 Web 服务和 AJAX。

    也许这不是最好的方法,但我会这样做:

    当您开始处理您的请求时,您会将一个进度对象粘贴到一个以 Guid 作为标识符的静态列表中。然后在进度发生变化时更新此进度对象的状态。

    要通过 javascript 获取进度,您需要构建一个类似这样的 web 服务,然后您可以在之前的 coden-p 的 setInterval 位中进行查询。

    [WebMethod]
        public string getProgress(string guidAsString)
        {
            Guid progressId = new Guid(guid);
            switch (Progresses.progresses.Where(g => g.ProgressId == progressId).FirstOrDefault().progressState)
            {
                case state.Validating:
                    return "Validating";
                case state.Authorizing:
                    return "Authorizing";
                case state.LoggingIn:
                    return "Logging in";
                default:
                    return "";
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      相关资源
      最近更新 更多