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
에 대해 "번역"을 쓰는 것을 의미합니다. 사용하기가 번거로울 수 있습니다.
올바른 방법인가요? 아니면 빠져 나올 수있는 구멍에 자신을 던지겠습니까?