2017-07-28 55 views
0

在我的一個ASP.NET Core應用程序中,View正在使用以下ViewModel。 ViewModel的基礎模型有一個屬性StartDate。該型號有DataAnnotionStartDate,但我在ViewModelStartDate上沒有使用相同的DataAnnotation,因爲我認爲如果DataAnnotation在您的型號中,那麼它會聚合到您的viewmodels。因此,以下View應僅顯示StartDate作爲日期。但是View顯示爲StartDate作爲日期和時間,例如, 9/30/2015 12:00:00 AM。另一方面,如果我同時使用ViewModel中的StartDate屬性上的DataAnnotation [DataType(DataType.Date)]屬性,則View正確顯示StartDate僅作爲日期,例如9/30/2015爲什麼這個ASP.NET Core Data Annotation在ViewModel中工作,但不在Model中工作

問題:爲什麼在ModelDataAnnotation不獲取聚集ViewModel

型號

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

視圖模型

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

查看

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

你覺得這樣會怎麼樣?ViewModel和Model是兩種完全不同的類型**。沒有涉及到的魔術屬性就是這樣一個元數據附加到一個程序集,類型,字段,屬性或方法,沒有**任何功能**,除非其他代碼片段讀取這些屬性並讀取它們的值或調用它們的方法,否則這些屬性什麼也不做,什麼都不做將會發生 – Tseng

回答

0

一些DataAnnotations被使用MVC,一些被EntityFramework使用(其他框架被其他框架使用,所以它不僅僅是EF和MVC)。有些被兩者使用。例如,EF和MVC都使用[Required],但出於不同的原因。 EF使用它來表示不可爲空。 MVC使用它來表示「在文本框中需要一個值」。但是,DataType屬性和許多其他類型僅是MVC。我知道這很混亂,似乎沒有很好的參考哪些技術的註釋。

這就是爲什麼您需要從視圖模型中分離數據模型的一個很好的理由。您可能需要在數據模型上使用特定註釋(如[必需]),但不希望將其用於ViewModel(因爲您希望在字段中不接受任何值,並在代碼隱藏中提供該值)。 ..

相關問題