2016-12-05 1 views
1

私は基本情報を含むmodelを持っています。しかし、私のViewは表示のためにもっと多くの情報を必要とするので、私はViewModelがその余分な情報を表示するためにここに必要と思うと思う。しかし、Validation attributesをモデルに追加すると、Code-First migrationを実行すると、databaseが自動的に作成され、各列の正しいdatatypeが作成されます。記入情報のため、Validation attributesをViewModelに追加する必要がありますか?ViewModelまたはModelでのASP.NET MVC検証?

public class Module 
{ 
    [Key] 
    public int id { get; set; } 

    [Required] 
    [StringLength(100)] 
    [Column(TypeName = "varchar")] 
    [Display(Name="Module Name")] 
    public string ModuleName { get; set; } 
} 


public class ModuleViewModel 
{ 
    [Key] 
    public int id { get; set; } 

    [Required] 
    [StringLength(30)] 
    [Column(TypeName="varchar")] 
    [Display(Name="Module ID")] 
    public string ModuleID { get; set; } 

    [Required] 
    [StringLength(100)] 
    [Column(TypeName = "varchar")] 
    [Display(Name="Module Name")] 
    public string ModuleName { get; set; } 

    //To populate dropdownlist 
    public List<SelectListItem> ModuleLevelList { get; set; } 

} 

この場合、実際にはViewModelが必要ですか?

+0

を私はそれがだと思います双方向... –

+0

'Module'クラスはあなたのエンティティクラスです。それにバリデーションを入れるのは意味がありません。バリデーションのためにviewmodelやその他のものをビューページに表示することができます。あなたのエンティティクラスをviewmodelクラスでマップします。 –

+0

model-view-controllerタグは、パターンに関する質問用です。 ASP.NET-MVCの実装には特定のタグがあります。 –

答えて

0

ビューモデルを使用することを強くお勧めします。今は冗長だと思っているかもしれませんが、私はあなたが私に感謝する道にはとても便利だと保証します。私は過去に何度も焼かれてきました。モデルオブジェクトをどこにでも使い、自分のようなデータアノテーションに大きく依存しています。プラス、あなたはあなたのケースではごみに、このような[表示(名前=「モジュール名」)]

としてビュー層ごみを使用してモデルの層を持っていない、私はこの提案:

public class Module 
{ 
[Key] 
public int id { get; set; } 

[Required] 
[StringLength(100)] 
[Column(TypeName = "varchar")] 
public string ModuleName { get; set; } 
} 


public class ModuleViewModel 
{ 
public int id { get; set; } 

[Required] 
[StringLength(30)] 
[Display(Name="Module ID")] 
public string ModuleID { get; set; } 

[Required] 
[StringLength(100)] 
[Display(Name="Module Name")] 
public string ModuleName { get; set; } 

//To populate dropdownlist 
public List<SelectListItem> ModuleLevelList { get; set; } 

} 
1

ユーザー入力検証のためのデータ注釈属性は、ViewModelに行きます。エンティティフレームワークコードのデータアノテーションまず、モデルを実行します。

概念的には、EFコードファーストを使用した入力とデータベース生成の検証の2つの異なるものです。

たとえば、Entity FrameworkコードファーストのRequiredおよびStringLengthは、varchar(length)NOT NULL型のデータベース列を作成します。 ViewModelのRequiredおよびStringLengthは、ユーザー入力の検証に使用されます。これら2つを組み合わせてはいけません。StringLength(length)を2回使用すると何も問題ありません。長さを1つの場所だけで表現したい場合は、長さの値を静的な定数に入れます。

+1

フィードバックいただきありがとうございます〜! – Pow4Pow5