2016-11-27 11 views
0

私はASP.NET MVCを使用してWebアプリケーションを開発しています。私はViewBagの使用を避けようとしていました。したがって、ドロップダウンを作成して一般的にデータを渡すビューモデルはほとんど作成しませんでした私は私の意見が必要です。同時に、データバインディングをクリーンに保ち、バインドされないプロパティ(包含/除外属性を使用せずに)を避けたいと思います。明らかにリターンモデルがその目的に最適であると言われています。1つのビューの2つのViewModel

したがって、1つのビューに対して2つの独立したモデルを作成すると悪い考えですか? 1つはすべてのデータを表示する必要があり、もう1つはフォームからのフィールドのみを使用するか、またはこれが実質的に過剰な形式ですか、私は自分のデザインの変更を再考すべきですか?

編集:簡単な例私は

class ViewModelA{ // passed to the view and then bound to when form is submitted 
    List<KeyValuePair<int, string>> DropDownValues; // will be always empty while databinding 
    int SelectedValue; // will be always 0 when passed to the view 
    ... 
} 

を説明するのもいいじゃないので、私は明らかにここに

class ViewModelB{ // contains data passed to the view 
    List<KeyValuePair<int, string>> DropDownValues; 
    ... 
} 


class ReturnModel{ // contains data returned from the view 
    int SelectedValue; 
    ... 
} 

でViewModelAを置き換える必要があり、私はちょうど私のモデルに直接結合することができますがのが前提としてみましょうより複雑で、保存する前にデータを処理する必要があります。

+3

ビューモデルにはビューに必要なすべてのプロパティがあります。 – DavidG

+0

はい、そうですが、データバインダーが扱う必要のある不要なフィールドがたくさんあるので、ポストデータ用に別のフィールドを作成するか、そのまま使用する必要がありますか? – Holger

+1

あなたのビューモデルに不要なフィールドがあるのはなぜですか? – DavidG

答えて

2

私はあなたが求めていることを知っていると思います。あなたは、年齢、名前、CountryOfResidence(ドロップダウン)、およびいくつかのプロパティを持つビューモデルを持っていると言っています。しかし、新しい人物を作成するときは、Age、Name、IdOfCountryをコントローラに投稿するだけです。

あなたの質問は、ビューモデル全体が必要でないときに投稿する点です。公正な質問。

これを行う方法はたくさんあります。ここでは一つの方法である:

  1. (投稿用)共通のプロパティを持つ基本クラスを作成し、ビューの複数のプロパティを持つ派生クラスを作成します。

データ転送オブジェクト(DTO)として1を参照する人もいます。これらのDTOは、プレゼンテーションレイヤー、サービスレイヤー、ビジネスレイヤー、データアクセスレイヤーなどの間で通信するために共有されます。

+0

はい、それは私が求めていることです。私は単にこれが良いアイデアか、ポスト(またはあなたがそれを呼んだときのDTO)とビューにデータを渡すためのビューモデルの2つのモデルがあるかどうかを知りたいだけです。 – Holger

+0

悪いことはありません。あなたが言及した理由のために、そしてそれは行動方法の意図を明確にしているので、実際には良い練習です:私は自分の仕事をするためにこのオブジェクトだけを必要とします。私は人々が巨大なビューモデルを渡し、プロパティの20%しか必要としないアクションメソッドを見てきました。ああ、DTOは一般的な用語です。私のじゃない。 – CodingYoshi

関連する問題