2011-01-19 2 views
0

빠른 수정보다는 다른 사람들이하고있는 일을 궁금해합니다.ModelState 만들기 지속성이 좋지만 지속성이 떨어지는 것 없음

문제는 사용자에게 오류/유효성보고를 위해 ModelState를 사용하고 있지만 RedirectToAction()을 사용하면 ModelState가 손실된다는 것입니다.

if (TempData["ModelState"] != null && !ModelState.Equals(TempData["ModelState"])) 
    ModelState.Merge((ModelStateDictionary)TempData["ModelState"]); 

내가 추가 한 OnActionExecuted의 재정에 : 내가 추가 한 OnActionExecuting의 재정에, (다른 모든 컨트롤러 상속) 우리의 기본 컨트롤러에 몇 가지 코드를 추가 한이 문제를 극복하기 위해

TempData["ModelState"] = ModelState; 

이 문제는 일부 오류 메시지가 잘못된 페이지에 표시 될 수 있음을 의미합니다. 난 그냥 ModelState.clear() 실행의 시작 부분에서 현재의 오류를 수정/정정하려고하지만, 삭제되지 않고 이상한 곳에서 오류가 나타나는 경우가 있습니다.

다른 사람들이 어떻게 이것을 처리합니까? 어떤 아이디어라도 환영합니다. 고마워요

답변

1

:

포인트 13

http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx

(데이터 수정에 대한 사용 PRG 패턴).

당신이하고있는 것과 상당히 유사하지만 작업 필터를 사용하고 있으며 잘못된 페이지에 아직 오류 메시지가 나타나지 않았습니다.

+0

내 결과가 항상 null 이었으므로 'if (filterContext.Result is ViewResult)'부분이 작동하지 않는다는 것을 알았지 만, 그것을 꺼내서 매력처럼 작동했습니다. 감사 – Ben

0

만약 내가 그렇게하려고한다면, 저는 캐싱을 사용하고 키 조합 (세션/컨트롤러/액션)을 사용하여 캐시 (아마도 세션)에 모델 스테이트를 저장합니다. 2 분 후에 만료됩니다.

이 방법을 사용하면 modelsteate를 재사용하지 않으려 고합니다. 다른 작업에 의해 작성되었을 가능성이 있으며 "올바른 모델보기입니까?"라고 걱정할 필요가 없습니다.

그런 다음 모델 상태를 다시로드하려는 각 메소드에 적용 할 속성을 만들거나 경로를 기반으로 기본 컨트롤러에서 자동으로 속성을 수행 할 수 있습니다. 내가 여기에 언급 된 솔루션을 구현 한

관련 문제