2010-11-29 4 views
3

공개 필드에서 DataAnnotation이 작동하지 않는 이유는 무엇입니까? 예 :공개 필드의 DataAnnotation과 MVC의 속성

namespace Models 
{ 
    public class Product 
    { 
     [Display(Name = "Name")] 
     public string Title; // { get; set; } 
    } 
} 

public ActionResult Test() 
{ 
    return View(new Models.Product() { Title = "why no love?" }); 
} 

@Html.LabelFor(m => m.Title) // will return 'Title' if field, or 'Name' if property 
@Html.DisplayFor(m => m.Title) 

제목이 표시 속성이면 아무 효과가없는 것 같습니다. 제목이 속성으로 변경되면 "이름"이 표시된 것처럼 예상대로 작동합니다.

이 예제에서는 단지 속성으로 변경하는 것이 쉬울 것 같지만 F #에서 형식을 사용하여 필드가 아닌 속성으로 컴파일되도록합니다. 속성 (TypeDescriptor)를 검색하는 데 사용되는 반사와 같은 메커니즘은 속성을 지원하기 때문에 왜 DataAnnotations이 필드에서 작동하지 않는 것입니다

은 ASP.NET 4 MVC RC 3.

답변

2

이유에서 테스트되었습니다 .

충분하지는 않겠지 만 충분한 수요가있을 경우 현장에서이 작업을 할 수 있습니다.

+0

MVC의 JSON 시리얼 라이저는 필드와 속성을 모두 반환하지만 필드가 주석에 대해 다르게 취급되는 이유는 확실하지 않습니다. – yanta

+0

.NET Framework의 일부분간에 불일치가 있습니다. DataAnnotations는 기본적으로 속성에서만 지원됩니다 (필드를 검사 할 수있는 MetadataProvider를 작성할 수도 있음). 반면 JavaScript 직렬화는 필드와 속성을 모두 지원합니다. 그게 바로 지금의 방식입니다. – marcind

관련 문제