2010-12-02 1 views
3

내 질문유효성 검사 주석을 어디에 둘 것인지 ViewModel 또는 Domain 객체? 내가 주석이에 정의 된 경우 UserCreateViewModel에서만 작동합니다 내 검증 (ModelState.IsValid)을 의미 내 생성 컨트롤러에서 UserCreateViewModel을 전달하고있다으로

입니다. 하지만 각 ViewModel에 DataAnnotation을 정의 할 수는 없기 때문에 많은 작업이 필요합니다. 대신 사용자 도메인 모델에 적용하고 싶습니다. 그렇다면 컨트롤러에 코드를 추가하지 않고도 내 주석 작업 및 매퍼로 수정하는 Create 메소드를 수정하는 방법은 무엇입니까?

// 내 컨트롤러 만들기 방법

[HttpPost] 
public ActionResult Create(UserCreateViewModel user) 
{ 
    if (ModelState.IsValid) 
    { 
     var createUser = new User(); 
     Mapper.Map(user, createUser); 

     _repository.Add(createUser); 

     return RedirectToAction("Details", new { id = createUser.UserId }); 
    } 

    return View("Edit", user); 
} 

// UserCreateViewModel -> 특정 뷰 모델을 작성

public class UserCreateViewModel 
{ 
    public string UserName { get; set; } 
    public string Password { get; set; } 
} 

// 사용자 -> 도메인 개체

[MetadataType(typeof(User.UserValidation))] 
public partial class User 
{ 
    private class UserValidation 
    { 
     [Required(ErrorMessage = "UserName is required.")] 
     [StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")] 
     [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed")] 
     public string UserName { get; set; } 

     [Required(ErrorMessage = "Password is required.")] 
     [StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")] 
     public string Password { get; set; } 
    } 
} 

답변

1

검증해야한다 이것이 사용자 입력으로받는 것이기 때문에 적어도 뷰 모델에 두십시오. 모델에 대한 유효성 검사가 관련되어 있다면 뷰 모델을 POST 액션 (정확히 수행해야하는 작업)에 전달하는 동안 모델의 유효성 검사가 무시됩니다. 물론 모델은 뷰 모델을 사용하지 않는 다른 애플리케이션에서도 재사용 될 수 있으므로 모델이 유효 함을 보장하기 때문에 여기서는 문제가되지 않습니다. ASP.NET MVC에 관해서는이 단계가 필요하지 않습니다.

관련 문제