2009-08-20 31 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