2017-07-28 5 views
0

私の1つのASP.NET Coreアプリケーションでは、Viewが次のViewModelを使用しています。 ViewModelの基になるモデルには、属性StartDateがあります。モデルのDataAnnotionStartDateにありますが、DataAnnotationがあなたのviewmodelsに集約されると私は考えていたので、StartDateStartDateに同じDataAnnotationを使用していません。したがって、次のViewは、StartDateを日付のみとして表示する必要があります。しかし、Viewは、日付と時刻としてStartDateを表示しています。 9/30/2015 12:00:00 AM。一方、ViewModelStartDate属性のDataAnnotation [DataType(DataType.Date)]も使用すると、Viewは、のように日付が9/30/2015と正しく表示されます。このASP.NET Core DataAnnotationがViewModelで動作しますが、モデルだけでは動作しません

質問ModelDataAnnotationViewModelに集約取得されていないのはなぜ?

モデル

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

のViewModel

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

ビュー

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

ViewModelとModelは**まったく別の2つのタイプです** **魔法はありません**属性はちょうどそれに付随するメタデータの一部です他のコードがこれらの属性を読み込み、それらの値を読み込んだり、それらのメソッドを呼び出したりしない限り、属性は何もしませんこれまでに起こる – Tseng

答えて

0

一部DataAnnotationsがで使用されていますMVC、EntityFrameworkで使用されるもの(他のフレームワークで使用されるものもありますので、EFやMVCだけではありません)いくつかは両方で使用されます。たとえば、[Required]はEFとMVCの両方で使用されますが、理由は異なります。 EFは、それを使用してnullを使用できないことを意味します。 MVCはそれを使って "テキストボックスに値が必要"を意味します。ただし、DataType属性と他の多くの型はMVCのみです。私はそれが混乱していることを知っています。注釈がどの技術のためのものであるかについての良い参照はないようです。

これは、ビューモデルとは別のデータモデルが必要な理由です。データモデルには([必須]のような)特定のアノテーションが必要な場合がありますが、フィールドに値を受け入れずにコードビハインドに値を渡したいので、ViewModelには入れたくありません。 ..

関連する問題