2009-06-11 2 views
0

내 컨트롤러 액션 :컨트롤러/액션에 ModelState 및 AddModelError가 지속됩니까?

[AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult Login() 
    { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Login(string UserName, string Password, bool RememberMe) 
    { 
     var userNameValidationResults = _validatorProvider.Validate<IMailAddressValidator>(UserName); 
     foreach (var result in userNameValidationResults.Where(r => !r.Passed)) { 
      ModelState.AddModelError("UserName", result.ErrorMessage); 
     } 

     var passwordValidationResults = _validatorProvider.Validate<IStringLengthValidator>(Password); 
     foreach (var result in passwordValidationResults.Where(r => !r.Passed)) { 
      ModelState.AddModelError("Password", "Please enter a password."); 
     } 

     if (!ModelState.IsValid) 
      return View(); 

     bool validUser = _userMembershipService.ValidateUser(UserName, Password); 

     if (!validUser) { 
      ModelState.AddModelError("_FORM", "Invalid e-mail address and/or password."); 
      return View(); 
     } 

     _userAuthenicationService.Login(UserName, RememberMe); 

     return RedirectToAction("Index", "Home"); 
    } 

내보기 :

<h2>Login</h2> 
<%= Html.ValidationSummary() %> 
<% using (Html.BeginForm()) { %> 
    <%= Html.TextBox("UserName") %> 
    <%= Html.Password("Password") %> 
    <%= Html.CheckBox("RememberMe") %> 
    <input type="submit" value="Login" /> 
<% } %> 

내가 유효성 검사 오류 후 다시 양식을 제출하면, 나는 ValidationSummary에서 다른 오류 (같은 정확한 오류)를 얻는다. 왜 그런 일이 일어나는거야? 감사. 내가 무엇을 의미

편집 내가 n가 제출의 숫자가 오류의 n 넘버를 가지고있다.

편집 2 내가 지금은들이 지속적인 남아있는 것처럼 보이는 문제가 오전 무엇 - 심지어 양식 필드 값이 변경되지 않습니다를. 위의 코드를 업데이트했습니다. 또한 Castle Windsor를 IoC 컨테이너로 사용하고 있지만 이것이 내 문제의 원인이 될 것이라고 생각하지 않습니다. 그러나 그럴 수있는 경우, 여기 컨트롤러를 등록 할 때 사용하는 소스가 있습니다.

 container.Register(
      AllTypes 
       .FromAssemblyNamed("Aplication") 
       .BasedOn<IController>() 
       .Where(t => t.Name.EndsWith("Controller")) 
       .Configure(c => c.LifeStyle.Is(LifestyleType.Transient)) 
       .WithService 
       .FirstInterface() 
      ); 
+0

질문에 대해 설명해 주시겠습니까? "양식 제출"이란 의미는 무엇입니까? 아마도 ModelState에서 먼저 오류를 제거해야합니다. –

+0

두 번째로 유효성 검사기가 오류를 다시 생성하지 않습니까? ModelState 및 오류가 호출간에 유지되지 않습니다. 양식 HTML 코드를 게시 할 수 있습니까? –

+0

'break;'로 루프 제어 검사를했기 때문에 그러지 않아야합니다. –

답변

2

사실 내 성 윈저 구성이었습니다.

그 이상한 나는 기초와 where 절을 동시에 할 수 없습니다.

0

여기서 유일하게 유지되는 것은 userName, password 및 rememberMe 값입니다. 양식이 제출되면 userName, password 및 rememberMe가 자동으로 ModelState에 추가됩니다. 그런 다음 Html.TextBox()는 ModelState에서 값을 가져 와서 HTML에 삽입합니다.

예를 들어, 잘못된 userName을 제출하면 컨트롤러가 ModelState 오류를 추가합니다. 양식이 다시 렌더링되지만 userName이 이미 이전 값으로 채워져 있음을 알 수 있습니다. 다시 제출하면 분명히 같은 오류가 다시 발생합니다.

+0

나는 그것이 모든 것을 똑같이 유지하고있는 것처럼 보인다라는 것을 알고있다. –

관련 문제