在我的一个ASP.NET Core应用程序中,View
正在使用以下ViewModel。 ViewModel的基础模型具有属性StartDate
。该模型在DataAnnotion
上有StartDate
但我在DataAnnotation
的{{1}}上使用的不是StartDate
,因为我认为ViewModel
是DataAnnotation
在您的模型中,它会汇总到您的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)
...
答案 0 :(得分:0)
一些DataAnnotations由MVC使用,一些由EntityFramework使用(其他由其他框架使用,因此它不仅仅是EF和MVC)。有些被两者使用。例如,EF和MVC都使用[Required],但原因各不相同。 EF使用它来表示不可空。 MVC使用它来表示"需要文本框中的值"。但是,DataType属性和许多其他类型仅是MVC。我知道它令人困惑,似乎没有哪个注释适用于哪种技术。
这就是为什么从视图模型中需要单独的数据模型的一个很好的理由。您可能需要在数据模型上使用特定的注释(如[必需]),但不要在ViewModel中使用它(因为您希望在字段中不接受任何值,并在代码隐藏中提供值,实例...