为什么这个ASP.NET Core DataAnnotation在ViewModel中工作,而不是仅在Model中工作

时间:2017-07-28 20:42:04

标签: asp.net-core visual-studio-2017 data-annotations

在我的一个ASP.NET Core应用程序中,View正在使用以下ViewModel。 ViewModel的基础模型具有属性StartDate。该模型在DataAnnotion上有StartDate但我在DataAnnotation的{​​{1}}上使用的不是StartDate,因为我认为ViewModelDataAnnotation在您的模型中,它会汇总到您的viewmodels。因此,以下View应仅将StartDate显示为日期。但是View显示StartDate作为日期和时间,例如9/30/2015 12:00:00 AM。另一方面,如果我在[DataType(DataType.Date)]中的StartDate属性上使用DataAnnotation ViewModel,则View会正确显示StartDate作为日期,例如, 9/30/2015

问题:为什么DataAnnotation上的Model未汇总到ViewModel

模型

...
[DataType(DataType.Date)]
public DateTime StartDate { get; set; }
...

视图模型

...
public DateTime StartDate { get; set; }
...

查看

...
@Html.DisplayFor(t => t.StartDate)
...

1 个答案:

答案 0 :(得分:0)

一些DataAnnotations由MVC使用,一些由EntityFramework使用(其他由其他框架使用,因此它不仅仅是EF和MVC)。有些被两者使用。例如,EF和MVC都使用[Required],但原因各不相同。 EF使用它来表示不可空。 MVC使用它来表示"需要文本框中的值"。但是,DataType属性和许多其他类型仅是MVC。我知道它令人困惑,似乎没有哪个注释适用于哪种技术。

这就是为什么从视图模型中需要单独的数据模型的一个很好的理由。您可能需要在数据模型上使用特定的注释(如[必需]),但不要在ViewModel中使用它(因为您希望在字段中不接受任何值,并在代码隐藏中提供值,实例...