2011-08-12 4 views
3

2つのビュー: 1)登録 - ユーザーアカウントを作成するためのプライマリビュー 2)カテゴリ - ビューを表示するコンボフィールドにカテゴリを動的に追加する部分的なビュー。異なるモデルの強く型付けされた部分図をレンダリングする

登録中に[カテゴリの追加]をクリックすると、カテゴリビューがjQueryダイアログとして表示されます。このビューには、名前や説明などの新しいカテゴリを作成するために必要なフィールドが表示されます。このため、別のモデルがあります。

例外の詳細:いくつかの検証エラーがあるかどう

GET]ページで、すべてが正常に動作しますが、しかし、ポストの上に、ページが補正を行うためのユーザプロバイダ値をリロードする必要があり、その代わりに次のエラーがスローされますと、System.InvalidOperationException :辞書に渡されたモデルアイテムは 'Delight.Models.User'タイプですが、この辞書には 'Delight.Models.Category'タイプのモデルアイテムが必要です。

私は(それは部分図に使用するモデルオブジェクトを指定していないので)次の文を使用して、この問題を引き起こしている可能性がありますことを考えた:

@Html.Partial("CreateCat") 

ただし、以下の過負荷に頼ることはしませんでした

@Html.Partial("CreateCat", null, null) 

上記の2番目のパラメータ(null値)は、モデルオブジェクトを表します。

はしかし、予想外に次のように私の問題を解決しました:

@Html.Partial("CreateCat", new Category(), null) 

はなぜ空のオブジェクトは、この場合には機能していますが、nullではないですか?

異なるモデルタイプの強く型付けされた部分表示をレンダリングする他の方法がありますか。

+0

これはMVCパターンが実際に使用される方法ではないと思います...あなたの部分的なビューは、あなたのページまたは別のページに統合されるべきでしょうか? –

+0

@ジェレミー私は他の選択肢がありません。カテゴリはajaxを介して追加されており、私はこれを行うための新しいブラウザウィンドウを開くのは好きではありません。実際には、いかなるポストバックデータも必要としません。 btw、ここでMVCに関する問題は何ですか? MVCは、さまざまなコンポーネントをどのように構造化するかについて、私たちにより多くの制御を与えるものではありませんか? –

+0

ヌルオブジェクトをビューに渡すと、ヌルオブジェクトが最初にチェックされない場合、ビューがクラッシュします。 Html.Partial( "CreateCat")を呼び出すと、親モデル(Models.User)を渡しています。新しいカテゴリ()で呼び出すと、コントローラを作成するために空の新しいカテゴリを返すときに、コントローラが行うことが基本的になります。編集:これは私がMVCに新しいので、間違っているかもしれませんが、これは私が理解しているものです。 – Jack

答えて

3

親モデルまたはモデルを使用しない場合を除いて、部分ビューには常に適切なモデルを渡す必要があります。 nullを渡すことは愚かです。部分ビューでインスタンス化されたモデルを必要としない場合、部分ビューでモデルを使用するのはなぜですか?この例では、新しいカテゴリ()が正しい選択だと思います。しかし、私はいつも見てきたサブモデルは、パーシャル

@Html.Partial("CreateCat", Model.Category) 

何をやっているやって必要について何か奇妙なように渡され、私はあなたが部分図を使用しているかどうか分かりません。

+0

カテゴリはそれ自体、バリデーター(stringlengthなど)を持つ別個のモデル(非常に小さいものですが)であるため、部分ビューが必要です。コメント(上記を参照)では、(部分的なビューを避けるために)新しいブラウザウィンドウを開くことでこれを行うことはできますが、jqueryダイアログとhtmlをスムーズなユーザーエクスペリエンスのためにプリロードする必要があります。 –

+0

Model.Categoryは大丈夫だと思いますが、フルページの読み込み中にカテゴリビューが常に空になると私は私のソリューションに固執すると思います。ご回答有難うございます。 –

+0

私は、「常に部分的なビューのために適切なモデルを渡す」とは同意しません。たとえば、私の部分ビューはMemberID DropDownListを生成し、ビューのモデルは間違いなく「メンバ」です。 @modelキーワードでモデルを表示することができます。 – Cheung

関連する問題