公共字段上的DataAnnotations与MVC中的属性

时间:2010-11-29 20:44:15

标签: asp.net-mvc data-annotations

为什么DataAnnotations不能在公共字段上运行?例如:

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)

如果Title是一个字段,那么Display属性似乎没有效果。如果标题更改为属性,它将按预期工作,显示“名称”。

在这个示例中,只是更改为属性似乎很容易,但我尝试使用F#中的类型,将它们编译为具有字段而不是属性的类。

这是在ASP.NET 4和MVC RC 3中测试的。

1 个答案:

答案 0 :(得分:2)

DataAnnotations不能使用字段的原因是因为用于检索属性的反射式机制(TypeDescriptor)仅支持属性。

虽然这并不容易,但如果有足够的需求,我们可以考虑使用字段进行此工作。