为什么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更改为属性,则可以按预期的方式工作,如显示“ Name”。

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

这已在ASP.NET 4和MVC RC 3中进行了测试。

#1 楼

DataAnnotations不适用于字段的原因是因为用于获取属性的类似反射的机制(TypeDescriptor)仅支持属性。

虽然这并不容易,但我们可以考虑如果有足够的需求,可以与田地一起使用。

评论


MVC中的JSON序列化程序会同时返回字段和属性,因此不确定为什么对注释使用不同的字段。

– anta
2010-11-30 20:08

这是.NET框架各部分之间的不匹配。默认情况下,属性仅支持DataAnnotations(尽管您可以编写也可以检查字段的MetadataProvider)。另一方面,JavaScript序列化同时支持字段和属性。那就是现在的样子。

– marcind
2010年12月1日,0:10