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.
MVC의 JSON 시리얼 라이저는 필드와 속성을 모두 반환하지만 필드가 주석에 대해 다르게 취급되는 이유는 확실하지 않습니다. – yanta
.NET Framework의 일부분간에 불일치가 있습니다. DataAnnotations는 기본적으로 속성에서만 지원됩니다 (필드를 검사 할 수있는 MetadataProvider를 작성할 수도 있음). 반면 JavaScript 직렬화는 필드와 속성을 모두 지원합니다. 그게 바로 지금의 방식입니다. – marcind