【问题标题】:DataAnnotations on public fields vs properties in MVC公共字段上的 DataAnnotations 与 MVC 中的属性
【发布时间】:2010-11-29 20:44:14
【问题描述】:

为什么 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 属性似乎没有任何作用。如果将 Title 更改为属性,它会按预期工作,如显示“Name”。

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

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

【问题讨论】:

    标签: asp.net-mvc data-annotations


    【解决方案1】:

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

    虽然这并不容易,但如果有足够的需求,我们可以考虑让这项工作与字段一起使用。

    【讨论】:

    • MVC 中的 JSON 序列化器同时返回字段和属性,不确定为什么字段对注解的处理方式不同。
    • 这是 .NET 框架部分之间的不匹配。默认情况下,仅在属性上支持 DataAnnotations(尽管您可以编写一个 MetadataProvider 也可以检查字段)。另一方面,JavaScript 序列化同时支持字段和属性。现在就是这样。
    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 2017-02-23
    • 1970-01-01
    • 2011-11-22
    • 2017-12-09
    • 2015-09-30
    • 2015-07-10
    相关资源
    最近更新 更多