2009-08-20 32 views
0

想象一下,您有n个页面,每个页面都近似共享相同类型的模型,但该模型在访问特定页面之前必须处于特定状态。在ASP.NET MVC中跨越多个跃点保留错误消息

因此,如果用户输入一个URL将它们带到第m页,但此时此页不可访问,则控制器会向TempData中的一组错误添加错误消息,然后重定向到第m-1页。

问题是当页面m-1也无法访问时。如果我们向TempData中的同一个集合(使用相同的键)添加一条消息,我们就不会在页面m-2上看到它,因为它在页面m-2的请求进行之前从TempData中移除。

我可以想象一个解决方案,我们有多个错误键,每次我们想添加一个错误或得到错误时,我们会依次尝试每个键,但是有没有人有更好的想法? (我知道,在理论上我能制定出正确的页面重定向到直客但这是要花费大量的返工,我没有太多的时间!)

编辑:

这是我正在考虑的事情:

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

回答

0

为什么不使用会话?

+0

它只是不舒服。我必须在将它放入View Model后手动清空它。我想事实证明,我毕竟知道哪个页面可以重新定向到正确的位置。 – Gaz 2009-08-20 17:47:23