2009-10-19 47 views
0

我在这里有一个用ASP.Net 2.0 + AJAX编写的旧Web应用程序。ASP.Net在标签控件中显示不同的文本在区间

我在我的页面中有一个文本框控件和一个按钮以及一个位于更新面板中的标签控件。

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

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

在当前的情况下,只有最后一个为标签控件指定的字符串显示在标签控件上。

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

在那里有一个AJAX控件(或者我可以使用的类似的东西),我可以在哪里指定要以秒为间隔显示的文本?

我该如何做到这一点?投入高度赞赏。谢谢。

编辑 我想我可能需要重新说明这个问题,使其更简单。

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

喜欢

Label1.Text = “消息1”

..延迟5秒

Label1.Text = “下一页消息”

..延迟5秒

Label1.Text =“Another Message”

.. Delay 5 secon DS

Label1.Text = “最后消息”

在当前的后背部模型(其包括AJAX的UpdatePanel),仅显示的最后一条消息。

请注意。谢谢。

回答

1

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

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 
+0

试过这个,但没有为我工作。我肯定错过了什么。请进一步阐述。谢谢。 – Batuta 2009-10-20 05:43:32

0

尝试使用UpdateProgress控件,它是一个ASP.NET AJAX服务器控件,可让您对UpdatePanel呈现的进度提供反馈。您可以将它与您的标签挂钩并更改文字以反映部分回传的进度。

+0

这并不足以满足我的需要,因为我需要显示的文本来自于页面数据的服务器端验证。 我需要使用标签控件(或任何其他控件)以特定秒数的差异来专门显示一些消息。 例如,我可能需要显示以下文本: 1.处理 2.数据验证 3.用户被认证 我寻找其中I指定的消息以n间隔来显示控制或功能有点像: 函数DisplayMsg(Msg1 as String,Msg2 as String,Msg3 as String,Interval as Integer) – Batuta 2009-10-20 00:34:41

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); 

但是,如果你需要这个来显示真正发生了什么,那么我建议使用web服务和AJAX。

也许这是不这样做最巧妙的方法,但我会做这样的事情:

当你开始处理您的请求你坚持进度对象转变成静态列表使用GUID作为标识符。然后在进度更改时更新此进度对象的状态。

要通过javascript获得进度,请构建一个类似于此的web服务,然后您可以在先前的codesnippet的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 ""; 
     } 
    }