我试图创建一个ASP.NET应用程序,并在实体类模型中使用DataAnnotations来获得更易读的显示名称:
在我的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; }
}
然后将其用作视图模型时,所有内容均按预期显示。
但是当我使用视图模型时,我不得不再次添加注释,因为最初添加到Car的显示名称不是基于该视图模型的“继承”。
在我的WebMVC项目中
public class EditCarViewModel{
[Display(Name = "Make of Car")]
public string Make { get; set; }
[Display(Name = "Year of Purchase")]
public int PurchaseYear { get; set; }
}
使用视图模型而不是Car Class的创建,索引和任何其他视图相同。
无论如何,初始实体类模型中的注释是否会继承/传播到相关的视图模型中,这样我就不必在多个地方这样做?
如果我然后尝试添加其他UI项目,那么我认为这将是一个更大的问题。例如WebMVC之外的桌面应用程序。
如果两者的标签都可以基于ApplicationDomain项目中的定义,那将是理想的选择。
答案 0 :(得分:1)
您可以尝试创建新的元数据类并将其应用于其他人。
[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; }
}
答案 1 :(得分:0)
无法将注释文本从一个类传播到另一个类。
但是,如果您只想将同一文本保留在一个位置,则可以创建常量并以这种方式使用它们:
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
中命名属性,而对一致的命名没有任何限制。