0

MVC 4와 Durandal을 의미하는 John Papa의 "Hot Towel"템플릿을 기반으로하는 작은 응용 프로그램을 작성하고 있습니다. 대부분 MVC 경험이있는 사람은 유효성 검사를 위해 데이터 주석과 함께 MVC의 "모델"을 사용하는 것이 가장 정확하다고 생각됩니다. 필자는 viewmodels 또는 유효성 검사를 두 번 쓰고 싶지 않습니다. 이는 충분히 합리적인 욕망 인 것 같습니다.Durandal with Boilerplate가있는 ASP.NET MVC ViewModels 사용

지금까지는 ko.mapping을 사용하여 JSON을 사용하여 서버 측에서 ViewModel과 해당 데이터를로드하고 내 양식을 바인딩하는 방법을 쉽게 알아 냈습니다. 큰. 그러나 유효성 검사 부분은 어떻습니까? 내 삶을 위해 나는 면도날을 사용하는 데 관심이 없기 때문에 인터넷에서이 솔루션을 찾을 수 없습니다 (일부 해결책은 HtmlHelpers을 사용하여 보았습니다).

현재 가장 좋은 방법은 리플렉션을 사용하여 서버의 ViewModel 객체를 간단한 JSON 객체로 변환하는 것입니다. 여기서이 주석은 멤버로 표시됩니다. 그래서 같이 :

public object TransformVM(object vm) 
    { 
     var properties = vm.GetType().GetProperties(); 
     var result = new Dictionary<string,object>(); 
     foreach (var p in properties) 
     { 
      var attributes = p.GetCustomAttributes(true); 
      var displayName = attributes.FirstOrDefault(a => a is DisplayNameAttribute) as DisplayNameAttribute; 
      result.Add(p.Name, new 
      { 
       value = p.GetValue(vm), 
       displayName = displayName != null ? displayName.DisplayName : "" 
      }); 
     } 

     return result; 
    } 

의미 대신이 JSON으로 뷰 모델을 점점

{ Email: '[email protected]' } 

나는 코의 바인딩이 방법을 사용하여 다음

{ Email: { value : '[email protected]', required: true, displayName: 'e-mail' } } 

과 같은 두 개의 수평 개체를 얻을 :

<label data-bind="text: post.Email.displayName"></label> 
<input type="text" data-bind=" value: post.Email.value" /> 

티 당연히 각자의 DataAnnotation에 대해 "번역"을 쓰는 것을 의미합니다. 사용하기가 번거로울 수 있습니다.

올바른 방법인가요? 아니면 빠져 나올 수있는 구멍에 자신을 던지겠습니까?

답변

1

John의 HotTowel과 동일한 아키텍처를 사용하려는 경우 Breeze JS 유효성 검사를 사용하지 않는 이유는 무엇입니까? 모델에는 EF/데이터베이스의 기본 유효성 검사 규칙이 있으며 사용자 정의 유효성 검사기를 사용하여 향상시킬 수 있습니다.

자세히 알아보기 : http://www.breezejs.com/documentation/validation