.NET核心数据注释显示名称 - 继承到ViewModels



我正在尝试创建一个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; }
}

请注意,这样,您可以在EditCarViewModelCar中命名属性,无论您喜欢哪种方式,对一致的命名无限制。

最新更新