2009-10-19 18 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 ""; 
     } 
    } 
相關問題