2009-08-20 5 views
0

n 페이지가 있다고 가정하면 각 페이지는 동일한 종류의 모델을 공유하지만 특정 페이지에 액세스하려면 해당 모델이 특정 상태 여야합니다.ASP.NET MVC의 여러 홉에서 오류 메시지 보존

사용자가 URL을 입력하여 m 페이지로 이동하지만이 페이지에 액세스 할 수없는 경우 컨트롤러는 TempData의 오류 컬렉션에 오류 메시지를 추가 한 다음 페이지 m-1로 리디렉션합니다.

페이지 m-1에도 액세스 할 수없는 경우 문제가 발생합니다. TempData에 동일한 키가있는 같은 컬렉션에 메시지를 추가하면 페이지 m-2에 대한 요청이 진행되기 전에 TempData에서 제거되므로 m-2 페이지에 메시지가 표시되지 않습니다.

우리는 여러 개의 오류 키가있는 해결책을 상상할 수 있습니다. 오류를 추가하거나 오류가 발생할 때마다 각 키를 차례로 시도하지만 누구에게 더 좋은 아이디어가 있습니까? (I 이론에 내가 똑바로로 리디렉션 올바른 페이지를 해결할 수 있다는 것을 알고 있지만, 재 작업을 많이 걸릴 것입니다 그리고 난 시간이별로 없어!)

편집 :

이것은 제가 생각하고있는 일종의 것입니다 :

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