2009-08-20 6 views
0

Imaginez que vous ayez n pages, dont chacune partage approximativement le même type de modèle, mais ce modèle doit être dans un état particulier avant de pouvoir accéder à certaines pages. Par conséquent, si l'utilisateur tape une URL pour l'amener à la page m, mais que cette page n'est pas accessible pour l'instant, le contrôleur ajoute un message d'erreur à une collection d'erreurs dans TempData puis redirige vers la page m-1.Préservation d'un message d'erreur sur plusieurs sauts dans ASP.NET MVC

Le problème est lorsque la page m-1 est également inaccessible. Si nous ajoutons un message à la même collection (avec la même clé) dans TempData, nous ne le voyons pas à la page m-2 car il est supprimé de TempData avant que la demande de la page m-2 ne commence.

Je peux imaginer une solution où nous avons plusieurs clés d'erreur et chaque fois que nous voulons ajouter une erreur ou recevoir des erreurs, nous essayons chaque clé à tour de rôle, mais quelqu'un a-t-il de meilleures idées? (Je sais que, en théorie, je pouvais travailler la bonne page pour rediriger vers de droite, mais qui va prendre beaucoup de réusinage et je n'ai pas beaucoup de temps!)

EDIT:

C'est le genre de chose à laquelle je pensais:

protected void AddError(string error) 
    { 
     int keyCounter; 
     var errors = GetErrors(out keyCounter); 

     errors.Add(error); 

     TempData.Remove(GetKey(keyCounter + 1)); 
     TempData[GetKey(keyCounter + 1)] = errors; 
    } 

    protected List<string> GetErrors() 
    { 
     int jnk; 
     return GetErrors(out jnk); 
    } 

    private string GetKey(int i) 
    { 
     return string.Format("ErrorKey:{0}", i); 
    } 

    private List<string> GetErrors(out int keyCounter) 
    { 
     keyCounter = 0; 
     List<string> errors = null; 

     for (int ii = 0; ii < MaxErrorKeyCounter; ii++) 
     { 
      string tryKey = GetKey(ii); 
      if (TempData.ContainsKey(tryKey)) 
      { 
       keyCounter = ii; 
       errors = (List<string>)TempData[tryKey]; 
      } 
     } 

     if (errors == null) 
      errors = new List<string>(); 

     return errors; 
    } 

Répondre

0

Pourquoi ne pas simplement utiliser la Session?

+0

Ça ne me semble pas juste. Je devrais le vider manuellement après l'avoir placé dans mon modèle de vue. Je pense qu'il se trouve que je fais après tout savoir quelle page je peux rediriger dès le départ. – Gaz

Questions connexes