我正在尝试创建一个ASP.NET应用程序,并在实体类模型中使用DataNannotations用于更可读的显示名称:
在我的ApplicationDomain项目
中public class Car{
public int Id { get; set; }
[Display(Name = "Make of Car")]
public string Make { get; set; }
[Display(Name = "Year of Purchase")]
public int PurchaseYear { get; set; }
}
然后,当我将其用作视图的模型时,所有内容都按预期显示。
但是,当我使用视图模型时,我必须再次添加注释,因为我最初添加到汽车中的显示名称不是"继承"到基于它的视图模型中。
在我的WebMVC项目中
public class EditCarViewModel{
[Display(Name = "Make of Car")]
public string Make { get; set; }
[Display(Name = "Year of Purchase")]
public int PurchaseYear { get; set; }
}
对于使用ViewModel而非汽车类的任何其他视图而言,
相同。
无论如何,是否可以在最初的实体类模型中具有继承/传播的注释,然后进入相关的视图模型,因此我不必在多个位置执行此操作?
我认为,如果我尝试添加其他UI项目,这将是一个问题。例如除WebMVC外,桌面应用程序。
如果两者的标签都可以基于应用程序域项目中的定义,那将是理想的选择。
您可以尝试创建一个新的元数据类并将其应用于其他类别。
[MetadataType(typeof(CarModelMetaData))]
public class EditCarViewModel{
public string Make { get; set; }.
public int PurchaseYear { get; set; }
}
[MetadataType(typeof(CarModelMetaData))]
public class CreateCarViewModel{
public string Make { get; set; }
public int PurchaseYear { get; set; }
}
public class CarModelMetaData{
[Display(Name = "Make of Car")]
public string Make { get; set; }
[Display(Name = "Year of Purchase")]
public int PurchaseYear { get; set; }
}
无法将注释文本从一个类传播到另一个类。
但是,如果您只想将同一文本保存在一个地方,则可以创建常数并以这种方式使用它们:
public static class DisplayConstants
{
public const string Make = "Make of Car";
public const string PurchaseYear = "Year of Purchase";
}
public class EditCarViewModel{
[Display(Name = DisplayConstants.Make)]
public string Make { get; set; }
[Display(Name = DisplayConstants.PurchaseYear)]
public int PurchaseYear { get; set; }
}
public class Car
{
public int Id { get; set; }
[Display(Name = DisplayConstants.Make)]
public string Make { get; set; }
[Display(Name = DisplayConstants.PurchaseYear)]
public int PurchaseYear { get; set; }
}
请注意,这样,您可以在EditCarViewModel
和Car
中命名属性,无论您喜欢哪种方式,对一致的命名无限制。