ASP.Net在区间标签控件中显示不同的文本

时间:2009-10-19 23:41:53

标签: asp.net javascript ajax

我在这里有一个用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 UpdatePanel)中,仅显示最后一条消息。

请告知。感谢。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果你只需要显示静态文本而没有真正连接到真正发生的事情那么简单的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);

但是如果你需要它来显示真正发生的事情,那么我建议使用webservice和AJAX。

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

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

要通过javascript获得进度,您需要构建一个类似于此的Web服务,然后您可以在之前的代码片段的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 "";
        }
    }