2012-01-03 4 views
1

Personオブジェクトを受け入れるビューがあるとします。ただ2つのオブジェクトに対してビューモデルを使用すべきですか?

は3つのプロパティ、FirstNameLastNameAge

は、今私は、オブジェクトの一部ではない別のテキストボックスフィールドを追加言うことができます持っています。

私はテキストボックスの値を必要としません。ちょうどそのユーザーのためのデータで設定されています。

あなたがフィールドを編集して、コントローラにPersonを投稿すると、あなたは問題が追加のテキストボックスがあるため、それが価値だ失ってしまった今でエラー

バックPersonオブジェクトを返すので、検証問題があると仮定することができますモデルの一部ではありません。

私はそのフィールドの文字列プロパティとすべての値を保持するPersonプロパティを持つViewModelを作成しました。 「特別な」テキストボックスに値を保持する良い方法があるようですね。

答えて

2

投稿されたフィールドから余分なフィールドを取得できるはずです。 ViewBagを使って初めてどのように設定しますか?もう一度設定する必要があります。

しかし、ViewModelを使用すると正確に何が問題になりますか?遅かれ早かれ、2つまたは3つの余分なフィールド、またはPersonとAppointmentがあります。

+0

ちょうど間違ったようでした。フィールドのデータは必要ありません。Personオブジェクトの一部ではないので検証が失敗したときに、そのフィールドを投稿アクションから再入力する方法がわかりません。景色。 – MisterIsaak

2

私はそれが完全に正しい方法だと思います。 viewmodelは、非UI処理のモデルではなくビューのモデルであり、Personと追加の可視情報が含まれています。それは概念とまったく同じです。あなたの人物はおそらく(見えない)モデルなので、有効なポストバックを持っている場合、その人物がデータを保存するようになります。それ以外の視覚的な情報は、その時点では無関係です。あなたのアプリの「ビュー/ UI」の部分。 そんなにきれいViewBags /セッション/ ViewDataをなどより

1

あなたは思うかもしれない多くの時間があり、のviewmodelで行く強くおのviewmodelに型付きビューを作成し、

にそれ以内
@model myViewModel 

@Model.Person.FirstName 
@Model.OtherViewOnlyValue 

を人にアクセスViewModelへのUIマッピングを含める必要はありませんが、ほとんどの場合、ViewModelにマッピングを追加することになります。私はViewModelはあなたのUI画面上のすべてを表すべきだと考えています。 HTTPはステートレスなので、ポストフォームの値はユーザーインターフェイスのコントロールを設定する際に重要な役割を果たします。

関連する問題