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