2011-07-18 10 views
21

viewmodelsはメソッドではなくプロパティのみを持つように制限する必要がありますか?メソッドを持つASP.NET MVC ViewModel - それは "合法"ですか?

私のビューにラジオボタンがあり、ラジオボタンをチェックする必要があるかどうかを確認したいとします。

私は完全に私の見解でこれを行うことができます

:のviewmodelにこの方法を使用して

@Html.RadioButton("radiobuttonName", "The value", Model.IsChecked(id) 

::私はのviewmodelにこのロジックを移動することができ

@Html.RadioButton("radiobuttonName", "The value", (id == Model.PersonId)) 

または

public int PersonId { get;set;} 
    public bool IsChecked(int id) 
    { 
     return (id == PersonId); 
    } 

これは問題ありませんか、それとも完全にビューで行うべきか、その他の方法で行うべきですか?

+0

練習は - それが賛辞であればそれはいいです。それは長い道のりも伸ばすことができます:)それはあなたがconsiceのやり方で行うために必要なことをしている限り。あまりにも心配しないでください。 – ppumkin

答えて

12

ViewModelにはメソッドがあります。あなたが毎回計算したい単一の結果である場合は、Controllerに評価コードを追加し、結果をViewModelに保存することをお勧めします。ただし、メソッドをより動的に使用して評価する必要がある場合、プロパティではできませんこれはあなたのために、ViewModelでこれをやっているのは大丈夫でしょう。

上記の例では、ViewModelにこれを行うことをお勧めします。ViewModelは、これを複数回コピーしてViewに貼り付けるのではなく、1か所にロジックが含まれています。

+0

ViewModelにロジックが全く存在しないと言われています。最高のコーディング方法。しかし、それを行う関数を呼び出すことによって、postModelがすべてのプロパティをポストバックに更新させるのは良い機能です。 (ビジネスロジックは分離されていますが、Linqとデータの取得のみ)データWONTがクライアントに送信される期間をプロパティで宣言すると、期間が分かります。だから、それは "保護されて" - ちょうどあなたがどのように、どのようにプロパティを公開するか注意してください:) – ppumkin

4

論理の正しい配置に関する本当に良い質問です。あなたのアプローチは確かに法律ですが、それはMVCの精神に従っていますか? :)

あなたのメソッドのロジックがこのView/ViewModelにのみ適用されるか、この基になるモデルタイプを扱う他のViewModelsに適用される可能性があるかどうかによって異なります(Person )。

これは、この特定のViewModelの目的のための1回限りの計算である場合は、モデルに保持します。この計算をPersonオブジェクトで一般的に使用する場合は、静的なServiceクラスを使用することを検討してください。 PersonServiceをクリックし、そこにメソッドを配置します。

関連する問題