display dataannotation依赖于其他属性MVC4

时间:2013-07-23 10:12:13

标签: asp.net-mvc asp.net-mvc-4 data-annotations

我有一个属性CountryText,其中包含要为属性国家/地区显示的文本,所以我需要像这样做:

[Display(Name=CountryText)]
        public string Country { get; set; }
        public string CountryText { get; set; }

我该怎么办呢?

1 个答案:

答案 0 :(得分:0)

<强>更新 这是不可能的。

您需要一个自定义属性来装饰您的属性,以及一个自定义模型metada提供程序(通常继承自DataAnnotationsModelMetadataProvider,这是MVC应用程序中的默认设置)。自定义提供程序将需要设置自定义属性中定义的元数据。

问题是您无法从模型metada提供程序访问该模型。您可以访问有关类型(模型类型,容器类型,属性...)的信息,但不能访问模型的具体实例,因此您无法获取属性值并在提供程序中使用它。

替代

但是,您可以使用Html.Label来显示字段标题。

如果你想让它更“自动”,你可以写一个自定义的html帮助器,为你创建标签。此帮助程序可以完全访问模型类型和模型内容,因此您仍然可以使用自定义属性,在html帮助程序代码中查找它,并使用其他属性的内容。

如果可以使用元数据提供商

您的自定义元数据提供程序应为视图模型属性添加所有必需的metadata。此元数据提供程序可以是基于约定的,也可以使用自定义属性来添加其他信息。

这些博客条目说明了如何实现自定义属性和元数据提供程序。