2011-12-20 9 views
0

私はViewModelを持っています。このMVC3同じViewModelが2つのケースで使用され、1つのケースで必須属性がある場合

public class ViewModel 
{ 
    public int Id { get; set; } 
    public int? Value { get; set; } 
} 

のようなものは、私は、既存のviewmodelsのテーブルがあり、その下に私はあなたがDBからフェッチされ、既存のviewmodelsのための新しいViewModelに

を追加することができ、フォームを持っている私は何の検証をしたいんValueプロパティですが、新しいViewModelを追加する場合には、必要な検証が必要です。実際のモデルはこのモデルよりも複雑なので、両方のモデルで同じモデルを使用したいと思います。可能ですか?

編集:これは

public class AddNewViewModel : ViewModel 
{ 
    public new int Value { get; set; } 
} 

を働くことはnewまたはvirtual/overrideと理由を使用することをお勧めしますか?

+0

virtualまたはoverrideの代わりにnewキーワードを使用することはできますが、この場合は多型性はないと思います。そのため、AddNewViewModelをViewModelとしてキャストした場合、AddNewViewModelのValueは、新しくキャストされたViewModelに値を設定しません。 – danludwig

+0

これは問題ではありません、私はViewModelのcollecton、親ViewModelの独自のプロパティにAddNewViewModelを入れていません..新しいキーワードで私のソリューションは、オーバーライドとolivehourよりも良い場合は質問 – Anders

+0

私は新しいと思うが、しかし、私は確信していないので、これを尋ねるあなたの質問を変更しました。私はそれが匂いがするので、私は新しいを避けようとしますが、それはちょうど私の意見であり、必ずしも "正しい"とは限りません。 – danludwig

答えて

0

必須の属性がクラスにコンパイルされます。

public class BaseViewModel 
{ 
    public int Id { get; set; } 
    public virtual int? Value { get; set; } 
} 

public class CreateViewModel : BaseViewModel 
{ 
    [Required] 
    public override int? Value { get; set; } 
} 

このようにして、検証属性を必要な場所に追加するだけです。

+0

正確に私がやったこと、私の編集D編集:あなたは上書きでそれをしました – Anders

+0

あなたがあなたの編集を書いている間、私は私の答えを書いていたと思います。私はそれを見た後でコメントを追加しました。 – danludwig