2009-10-19 7 views
0

J'ai ici une ancienne application web écrite en ASP.Net 2.0 + AJAX.ASP.Net Affichage texte différent dans le contrôle d'étiquette à intervalle

J'ai dans ma page un contrôle de zone de texte et un bouton et un contrôle d'étiquette qui est dans un panneau de mise à jour.

Un texte sera entré dans la zone de texte et, par la suite, sur l'événement textchanged du contrôle, un traitement côté serveur et des validations de données sont impliqués.

J'utilise le contrôle d'étiquette comme affichage pour informer l'utilisateur de la progression de la validation. Différents messages peuvent apparaître au contrôle d'étiquette.

Dans le scénario actuel, seule la dernière chaîne spécifiée pour le contrôle d'étiquette est affichée sur le contrôle d'étiquette.

Je cherche des façons de pouvoir afficher un texte différent sur le contrôle de l'étiquette, disons à un intervalle de 5 secondes.

Existe-t-il un contrôle AJAX pour cela (ou quelque chose de similaire que je pourrais utiliser), où je pourrais spécifier le texte à afficher à n intervalle de secondes?

Comment puis-je y parvenir? Entrées très appréciées. Merci.

Édité Je pense que je devrais reformuler cette question pour la rendre plus simple.

Après une page post asp.net, comment pourrais-je spécifier une chaîne de texte différente dans un contrôle d'étiquette qui devrait s'afficher toutes les n secondes?

Comme

Label1.Text = "Message 1"

.. délai de 5 secondes

Label1.Text = "Message suivant"

.. délai de 5 secondes

Label1.Text = "Un autre message"

.. Délai 5 secon ds

Label1.Text = "Dernier Message"

Dans le modèle de poste actuel de retour (qui comprend AJAX UpdatePanel), seul le dernier message est affiché.

Veuillez aviser. Merci.

Répondre

1

Si le contrôle d'étiquette est contenu dans le panneau de mise à jour, appelez votre code à l'aide d'un System.Timers.Minuterie

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 

Commandez votre liste d'entrée de messages dernier message d'état premier message d'état

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

J'ai essayé cela mais n'a pas fonctionné pour moi. J'ai dû louper quelque chose. Veuillez développer plus loin. Merci. – Batuta

0

Essayez le contrôle UpdateProgress, c'est un contrôle de serveur ASP.NET AJAX qui vous permet de donner votre avis sur la progression d'un rendu UpdatePanel. Vous pouvez l'accrocher à votre étiquette et modifier le texte pour refléter la progression de la publication partielle.

+0

Cela ne me suffit pas car le texte que je dois afficher provient de la validation côté serveur des données de la page. J'ai besoin d'afficher spécifiquement certains messages en utilisant le contrôle d'étiquette (ou tout autre contrôle) à la différence de secondes spécifiques. Par exemple, je peux avoir besoin d'afficher les textes suivants: 1. Traitement 2. Les données validées 3. L'utilisateur est authentifiées Je cherche un contrôle ou la fonction où je spécifie les messages à afficher à l'intervalle de n de secondes, un peu comme: Fonction DisplayMsg (Msg1 en tant que chaîne, Msg2 en tant que chaîne, Msg3 en tant que chaîne, intervalle en tant qu'entier) – Batuta

0

Si vous ne devez afficher des textes statiques sans lien réel avec ce qui se passe vraiment sur un javascript simple comme cette volonté probablement suffit:

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

Toutefois, si vous en avez besoin pour afficher ce qui se passe vraiment je vous recommande d'utiliser un webservice et AJAX.

Peut-être que ce n'est pas la plus élégante façon de le faire, mais je le ferais quelque chose comme ceci:

Lorsque vous commencez à traiter votre demande vous vous en tenez un objet de progression dans une liste statique avec un Guid comme identifiant. Ensuite, vous mettez à jour l'état de cet objet de progression lorsque la progression change. Pour obtenir la progression à travers javascript, vous construisez un webservice qui ressemble à ceci que vous pouvez ensuite interroger dans le bit setInterval du codenippet précédent.

[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 ""; 
     } 
    } 
Questions connexes