2017-12-21 15 views
0

저는 ASP.NET MVC 응용 프로그램이 있으며 데이터 주석 특성을 기반으로 레벨보기 모델 유효성 검사와 도메인 모델 유효성 검사 모두에 대한 유효성을 확인하고자합니다. 보기 모델의 검증은 간단합니다 작동합니다MVC - 도메인 모델 유효성 검사

public class CustomerFormVM 
{ 
    [Required] 
    [Display(Name = "Name")] 
    public string Name { get; set; } 
    [Required] 
    [Display(Name = "Street")] 
    public string Street { get; set; } 
    [Required] 
    [Display(Name = "City")] 
    public string City { get; set; } 
    [Required] 
    [Display(Name = "State")] 
    public string State { get; set; } 
} 

다음 컨트롤러 전화 :

 if (ModelState.IsValid) 
     { 

나는 같은 도메인 모델 클래스가 있습니다

public class CustomerFormPoco 
{ 
    [Required] 
    [Display(Name = "Name")] 
    public string Name { get; set; } 
    [Required] 
    [Display(Name = "Street")] 
    public string Street { get; set; } 
    [Required] 
    [Display(Name = "City")] 
    public string City { get; set; } 
    [Required] 
    [Display(Name = "State")] 
    public string State { get; set; } 
} 

을하지만, 그것을 어떻게 확인할 수 있나요?

// viewmodel is CustomerFormVM object 
var pocoModel = mapper.Map<CustomerFormPoco>(viewmodel); 

내가 다음 '뷰 모델'변수를 확인하지 않으면 내가 널 이름, 거리, 도시와 'pocoModel'변수 ...

어떻게 확인 전화를하고 결정을 내릴를 얻을 결과에 따라?

+0

왜 뷰 모델을 확인하지 :

if (!string.IsNullOrEmpty(pocoModel.Name) && !string.IsNullOrEmpty(pocoModel.Street) && !string.IsNullOrEmpty(pocoModel.City) && !string.IsNullOrEmpty(pocoModel.State)) { // Code here } 

는이 같은 덜 중복와 함께 할 아마 것? –

+0

모든 데이터를 다시 검증하는 대신, 뷰 모델을 사용하여 응용 프로그램 계층에서 데이터의 유효성을 이미 확인했다고 가정하는 것이 좋습니다. 귀하의 도메인은 데이터가 아닌 비즈니스 규칙의 유효성 확인에 중점을 두어야합니다. – Alisson

+0

jQuery 유효성 검사는 클라이언트 측에서 viewmodel의 유효성 검사를 처리 할 수 ​​있습니다. 당신은 단순해야하는'Required' 속성만을 사용하기 때문에. 그런 다음 통과하면 서버 측의 유효성 검사에 대해 걱정할 필요가 없습니다. –

답변

0

어때? 도메인 모델에 매핑하기 전에

string[] fields = new string[] { pocoModel.Name, pocoModel.Street, pocoModel.City, pocoModel.State }; 
bool isValid = true; 
foreach (string field in fields) 
{ 
    if (string.IsNullOrEmpty(field)) 
    { 
     isValid = false; 
     break; 
    } 
} 
if (isValid) 
{ 
    // Code here 
} 
+0

은이 방법이 맘에 들지 않습니다. 우선, 유효성 검사와 논리가 혼합되는 것을 원하지 않습니다. 둘째, 클래스 내부에서 유효성 검사를 수행하려고합니다. 셋째, 데이터 주석 속성을 사용하고 싶습니다. –