在元数据上使用DisplayAttribute时标签文本不正确

时间:2011-05-23 02:08:03

标签: asp.net-mvc

我为我的实体创建了一个元数据对象以进行验证。验证工作正常,但我遇到display属性问题。我想在元数据上只显示display属性以及验证属性,并为标签和错误消息显示正确的文本。

似乎除非我在视图模型上指定元数据对象的display属性,否则我将获得标签或错误消息的错误文本。

是否可以只定义元数据类中的所有必要属性,并将所有内容都提供给视图?

型号:

[MetadataType(typeof(Metadata))]
public partial class Contact
{
    class Metadata
    {
        [Required]
        [Display(Name = "FirstName", ResourceType = typeof(MyResources))]
        public string FirstName { get; set; }
    }        

    public string FirstName { get; set; }
}

查看型号:

public class ContactViewModel
{
    // Want to be able to omit all attributes from here
    //[Display(Name = "FirstName", ResourceType = typeof(MyResources))]
    public string FirstName { get; set; }
}

1 个答案:

答案 0 :(得分:1)

你这里做错了什么。视图模型应包含表示和验证属性。视图模型在视图中显示,并且因为每个视图都有不同的特定视图模型,所以应该使用Display属性,以便根据此特定视图的要求对其进行正确格式化。

就验证而言,IMO也应该在视图模型上执行。为什么?因为您从视图中收到视图模型。我们以经典的插入/编辑视图为例。您将拥有两种不同的视图模型:InsertItemViewModelEditItemViewModel。在“编辑”视图模型中,将需要ID属性,因此使用“必需”属性标记,但不在“插入”视图模型中标记。同样代表所有格式验证属性,例如StringLength,Regex,... =>他们应该在视图模型上。

就模型而言,负责操作模型的服务层应该处理ensuring its validity