我为我的实体创建了一个元数据对象以进行验证。验证工作正常,但我遇到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; }
}
答案 0 :(得分:1)
你这里做错了什么。视图模型应包含表示和验证属性。视图模型在视图中显示,并且因为每个视图都有不同的特定视图模型,所以应该使用Display属性,以便根据此特定视图的要求对其进行正确格式化。
就验证而言,IMO也应该在视图模型上执行。为什么?因为您从视图中收到视图模型。我们以经典的插入/编辑视图为例。您将拥有两种不同的视图模型:InsertItemViewModel
和EditItemViewModel
。在“编辑”视图模型中,将需要ID属性,因此使用“必需”属性标记,但不在“插入”视图模型中标记。同样代表所有格式验证属性,例如StringLength,Regex,... =>他们应该在视图模型上。
就模型而言,负责操作模型的服务层应该处理ensuring its validity。