2009-08-04 6 views
2

저는 처음으로 asp.net mvc 사이트를 처음 마쳤지만 유효성 검사의 견고성에 만족하지 않았습니다. asp.net mvc 유효성 검사를 추가하면 모델이 null이됩니다

내가 검증에 읽어 다음 내 UsersController 내 편집 액션에 아래 코드를 추가 :

if (user_.firstname.Trim().Length == 0) 
     { 
      ModelState.AddModelError("firstname", "First Name is required."); 
      return View(); 
     } 

난 그냥이에서 테스트를하고 모델이고 나는 지금 내보기에 점점 오류입니다 없는.

<% using (Html.BeginForm()) 
    {%> 
<fieldset> 
    <legend>Fields</legend> 
    <p> 
     <label for="Email"> 
      Login Name: 
      <%= Model.loginName%> 
     </label> 
    </p> 
    <p> 

위의 모델은 null이므로 Model.loginName에 대한 예외가 발생합니다. 어떤 아이디어가 여기에서 계속되고 있는지. 위 코드 (유효성 검사)를 제거하면 모든 것이 잘 동작합니다. (것을 제외하고 난 후 내 데이터베이스에 쓰레기를 넣을 수 있습니다.

답변

4

을 유사한 주제에 대한 내 대답을 참조하십시오.

Validating form using ModelState

때마다 당신이 ModelState에 모델 오류를 추가하고 다시는보기를 호출 asp.net MVC 프레임 워크는 시도 값을 찾기 위해 시도 또한보기 당신의 강력한 형식의보기에 USER_ 개체를 반환해야합니다

if (user_.firstname.Trim().Length == 0) 
{ 
    ModelState.AddModelError("firstname", "First Name is required."); 
    ModelState.SetModelValue("firstname", ValueProvider["firstname"]); 

    return View(user_); 
} 
+0

비슷한 토론이 있습니다. http://forums.asp.net/p/1377232/2900140.aspx#2900140 – RichardOD

0
컨트롤러에서

당신이 오버로드 된 메서드를 추가해야합니다..

이 솔루션을
public ViewResult UpdateUser() 
    { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult UpdateUser(user data) 
    { 
     if (user_.firstname.Trim().Length == 0) 
     { 
      ModelState.AddModelError("firstname", "First Name is required."); 
      return View(); 
     } 
     return View(); 
    } 

초 방법 모델을 사용하면 뷰에 모델을 통과하지 있기 때문에

1

당신은 모델 널 오류가 발생하고 null이되지 않습니다 ...에서 당신을 중지 아무것도가있다 그냥하는거야?

예.

if (user_.firstname.Trim().Length == 0) 
{ 
    ModelState.AddModelError("firstname", "First Name is required."); 
    return View(user_); 
} 

이 방법은 해결 될 수 있지만 실제로 유효성 검사가 어떻게 작동하는지 잘 보여야합니다. 유효성 확인은 컨트롤러가 아닌 다른 곳에서 실제로 수행되어야합니다. 예를 들어, 모든 유효성 검사를 모델 자체에 넣을 수 있습니다.

1

반환 방법으로 모델을 추가 했으므로 이제 작업을 시작했습니다.

답변 해 주셔서 감사합니다.

돌아 오는보기 (contactToEdit);

관련 문제