2011-11-14 9 views
4

저는 ASP.Net MVC 3을 시작하려고하는데이 시점에서 혼란 스럽습니다.ASP.Net MVC 3 ModelState.IsValid

일부 예에서는 컨트롤러에 입력이 포함 된 동작이 실행될 때 ModelState.IsValid가 true인지 확인하기위한 검사가 수행됩니다. 일부 예제에서는이 검사가 수행되지 않았 음을 보여줍니다. 이 수표는 언제 작성해야합니까? 입력이 조치 메소드에 제공 될 때마다 사용해야합니까?

답변

7

입력 방식이 동작 방식에 제공 될 때마다 사용해야합니까?

정확하게 작업 인수로 제공된 뷰 모델을 사용하고 있으며이 뷰 모델과 관련된 일부 유효성 검사 (예 : 데이터 주석)가 있습니다. 여기에 일반적인 패턴입니다 : 다음

public class MyViewModel 
{ 
    [Required] 
    public string Name { get; set; } 
} 

과 :

[HttpPost] 
public ActionResult Foo(MyViewModel model) 
{ 
    if (!ModelState.IsValid) 
    { 
     // the model is not valid => we redisplay the view and show the 
     // corresponding error messages so that the user can fix them: 
     return View(model); 
    } 

    // At this stage we know that the model passed validation 
    // => we may process it and redirect 
    // TODO: map the view model back to a domain model and pass this domain model 
    // to the service layer for processing 

    return RedirectToAction("Success"); 
} 
2

예. 주로 [HttpPost] 속성으로 태그가 지정된 작업에 사용됩니다.

imho 뷰 모델은 항상 유효성을 검사해야하며 따라서 항상 일종의 유효성 검사 (일반적으로 DataAnnotation 특성)가 있어야합니다. 당신이 MVC에서 오류 처리에 관심이 있다면

public class MyViewModel 
{ 
    [Required] // <-- this attribute is used by ModelState.IsValid 
    public string UserName{get;set;} 
} 

, 나는 며칠 전에 blogged about it을했습니다.

+0

미안하지만, '[필수]'속성이'ModelState.IsValid'에 의해 사용된다고 말하는 것은 정확하지 않습니다. 뷰 모델에 요청 값을 바인딩 할 때 오류 메시지를 ModelState에 삽입하는 기본 모델 바인더에서 사용됩니다. –

+0

알아요,하지만 imho는 기본 유효성 확인 작업을 원하는 새 사용자와 관련이 없습니다. – jgauffin

+1

IMHO 우리는 새로운 사용자라도 가능한 한 정확하게해야합니다. 예를 들어 대답에이 주석을 삽입하는 방식으로 ASP.NET MVC의 내부 작업에 익숙하지 않은 사람들은 분명히 사실이 아닌 유효성 검사를 트리거하는 것이 ModelState.IsValid' 호출이라고 생각할 수 있습니다. 예를 들어 나는 ModelState.IsValid가 항상 true를 반환하는 이유를 묻는 사람들을 보았습니다. 그 이유는 액션이 ​​어떤 뷰 모델을 인수로 사용하지 않았기 때문입니다. 따라서 기본 모델 바인더가 잠재적 오류 메시지를 모델 상태에 추가하지 못했기 때문입니다. –