2010-06-21 2 views
1

나는 유효성 검사를 위해 동일 컨트롤러에서 한 동작에서 다른 동작으로 ModelState를 전달하려고합니다. 그러나 모델 상태는 업데이트되지 않습니다. 나는 TempData [ "____ MvcContrib_ValidationFailures____"]가 포워딩 액션에서 ModelStateDictionary를 포함하고 있음을 알았지 만, 이것이 현재 나의 ModelState로 자동 전송되어야한다고 생각 했는가? 내가 어디로 잘못 가고 있니?MVCContrib의 ModelStateToTempData 특성이 작동하지 않는 이유는 무엇입니까?

ASP.NET MVC2 및 MVCContrib 2.0.36.0을 사용하고 있습니다. 또한이 속성을 사용하여 컨트롤러를 꾸미려고했지만 결과는 같습니다.

코드 :

[HttpGet] 
[ModelStateToTempData] 
public ActionResult NewsEventsSignup() 
{ 
    var newsEventsSignupDetails = this.TempData.GetItem<NewsEventsSignupDetails>(); 

    var viewModel = _newsEventsSignupPageViewModelMapper.MapFrom(newsEventsSignupDetails); 

    return this.View(viewModel); 
} 

[HttpPost] 
[ModelStateToTempData] 
[ValidateAntiForgeryToken] 
public ActionResult NewsEventsSignup(NewsEventsSignupFormViewModel newsEventsSignup) 
{ 
    ActionResult resultToReturn; 

    var newsEventsSignupDetails = _newsEventsSignupDetailsMapper.MapFrom(newsEventsSignup); 

    try 
    { 
     _newsEventsSignupTasks.SignupForNewsAndEvents(newsEventsSignupDetails); 
     resultToReturn = this.RedirectToAction(x => x.Index()); 
    } 
    catch (RulesException e) 
    { 
     e.AddModelStateErrors(this.ModelState); // from xVal 
     this.TempData.AddItem(newsEventsSignupDetails); // for showing invalid input 
     resultToReturn = this.RedirectToAction(x => x.NewsEventsSignup()); 
    } 

    return resultToReturn; 
} 

답변

1

가 어떻게 ModelState가 작성되지 확인합니까? 이것은 OnActionExecuted 필터이므로 작업 완료시에만 채워집니다. 작업의 값을 확인할 수 없습니다.

ModelState 현실에 오류가 있는지를 확인하는 가장 쉬운 방법은 유효성 검사 요약을 뷰에 넣는 것입니다.

는 오류가 나는 리디렉션하기 전에 NewsEventsSignup에서

ModelState.AddModelError("TestError", "This is an errortest"); 

을 시도 할 것이다 관련된 경우 xval되지 않는다는 것을 참조하십시오.

또한 디버거 또는 일부 디버그 코드에서 TempData에 액세스하려고 시도하지 마십시오. 처음 액세스 할 때 삭제됩니다.

+0

OnActionExecuted 필터를 알지 못했습니다. 검증 요약은 진실을 밝혀주었습니다. 내 오류는 "이름"과 "전자 메일"대신 ". 이름"및 ". 전자 메일"때문에 입력 필드의 이름/ID가 무엇인지 입력 또는 필드 유효성 검사 오류 클래스가 설정되지 않습니다. 이상한. 이유는 모르겠다. 삽입 중입니다. 그렇지 않으면, 일들이 작동하는 것처럼 보입니다. –

+0

질문을 게시 한 Malcolm과 Chris F에게이 문제에 대해 직접 고민했습니다. – JoseMarmolejos

관련 문제