2012-02-06 10 views
0

私はMVC3プロジェクトを作成しています。これには、強く型付けされたビューモデルが関連付けられています。私は、このビューにオプションのセクションを追加して、2番目のモデルのデータを含むセクションを追加しました。その半分は最初のモデルと共有されています。MVC3にオプションのセカンダリモデルを含むビューの構造

私の質問は、これを実装する最良の方法は何ですか?オプションのモデルが表すオブジェクトをビューモデルに追加してそこから値をマップしようとしますか?

このようにすれば、どのように編集者を両方のモデルに関連付けることができますか?

答えて

1

は、最良の選択でありますあなたはまだHTMLヘルパーを活用することができます。レンダリングする前に、2番目のモデルでnull参照をチェックすることを忘れないでください(これはオプションなので)。 プロパティを共有するために、ビューモデルには、両方のモデルを内部的に同期させる特別なgetter/setterを含めることができます。

+0

viewModelでメンバープロパティを使用する場合、手動で値を割り当てる必要がありますか?または、MVCバインダーは何とか私のためにそれを行いますか? 私が持っているもう1つの質問は、これがデータベースでどのように行われるかということです。現時点では、プライマリモデルのIDを格納するデータベースのネストされたモデルにプロパティを追加し、毎回新しいエントリを作成するのではなく、既に追加されているかどうかを確認できます。それはそれを設定するためのまともな方法ですか、私はこれを行う必要があります良い方法はありますか? – Philter

+0

MVCバインダーは、使用しているプロパティーのセッターを呼び出すだけです。このセッターの内部では、ネストされたモデルの値を更新するためのコードを配置することができます。文字列のようなものです。{set {this.firstModel.Name = value; this.secondModel.Name = value; } '。これは可能ですが、それは最高のデザインではないかもしれません。したがって、2番目の質問については、この特定のユースケースについての詳細な情報を持たずに設定することが適切な方法であるとは言えません。おそらく、最初に共有プロパティが必要な理由について、より多くの情報を提供することができます。 –

+0

確かに、私は基本的に車の機械的な問題の情報を取り込むデータ入力アプリケーションを書いています。問題は、車両が機械的な問題のために走行を逃した場合、機械の問題入力フォームでフィールドの約半分を分けている実行されなかったインスタンスを自動的に入力する必要があるということです。 2回目に情報の半分を入力するのではなく、既存の情報を使用できるようにしたいと考えています。 – Philter

1

私はあなたの質問とこれが過去にどのように成し遂げられたのかを理解していると思います。

オプションのモデルをビューモデルにパラメータとして追加し、そのオプションモデルに入力された部分ビューを作成します。そのパーシャルビューを表示できる基準が満たされている場合は、そのパーシャルビューにviewmodel.optionalmodelを渡します。 ViewBagとは異なり、それは、型の、ので、ビューモデルにオプションのモデルを追加あなただけ(ヌル参照のように)任意の頭痛の原因となるパラメータの重複について少し注意する必要があり

関連する問題