-1

複数のモデルをコントローラーからビューに送信する方法は?

これは何度も聞かれる質問のようですが、私のような初心者にはまだ良い答えがありません (私はそれを見つけていません)。

私が見つけた1つの解決策は、いくつかの「親」モデルを作成し、親子モデルのコレクションを返すことです。両方のモデルが互いに関連していないため、親モデルを作成したくありません。

たとえば、間に関係のない 2 つのモデルがあります。これらは別のモデルです。たとえば、PersonModelHardwareModel. 私は 2 つのパーシャル ビューを持っています。1 つは needs PersonModel、もう 1 つは needsHardwareModelです。

ViewをHomeController返します。このビューには、両方の部分ビューが表示されます。だから私はに送る必要がありPersonModelます_PersonPartialViewHardwareModelに送信する必要があります_HardwarePartialView

これを行う方法?

無関係なモデルの Collection を View に送信するオプションが必要だと思いますが、正確にはどうすればよいですか?

編集: いくつかの説明: 1 つまたは両方の部分的なビューを示すことに基づいて、複雑な決定を下しています。ダッシュボードのように考えることができます。ユーザーは、1 つまたは複数の「ダッシュボード」のようなパネルを見ることができます。したがって、それらは互いに無関係でさえある可能性があります。したがって、2 つ以上の異なるモデルと異なる部分ビューがあるため、実際の状況はより複雑です。多分私は絶対に異なるアプローチをとるべきです。

4

3 に答える 3

2

HomeView が PersonModel と HardwareModel の両方を必要とする場合、これら 2 つの組み合わせがモデルになります。だから例えば作成する

class HomeModel
{
    PersonModel person;
    HardwareModel hardware;
}

そしてあなたはあなたのモデルを持っています。

アップデート

質問の更新に基づいて、ダッシュボードのようなページがある場合、1 つのオプションは、現在のメイン ビューを廃止することです。パネルの位置を定義するスケルトン ビューを用意しますが、その内容は定義しません。次に、AJAX 呼び出しを使用して部分ビューを要求し、パネルに入力します。そうすれば、各部分ビューには他とは別の独自のモデルがあり、最終的にホストされる可能性のあるすべての部分ビューのすべてのモデルを 1 つのビューで把握する必要がなくなります。

于 2013-11-05T09:13:03.067 に答える
1

複数のビューの一部であるが、必ずしも各モデルの一部ではない抽象的なもの (例: カルチャ) を ViewData / ViewBag に入れることで終了しました。追加のクラスを介してビュー バッグをカプセル化する拡張メソッドを提供することにより、厳密に型指定された方法でアクセスできます。あなたのウェブページの主なものHardwareModelではないように聞こえるので、これらに何かを入れることをお勧めします.

public static HardwareSettings GetHardwareSettings (this HtmlHelper html)
{
  // simplified; add lazy instantiation...
  return (HardwareSettings) html.ViewData["hardware"];
}

これは確かにあなたができる最善のことです。これが問題に合わない場合は、アーキテクチャに欠陥がある可能性があるため、アーキテクチャを再検討することをお勧めします。

于 2013-11-05T09:09:46.317 に答える
0

このモデルがリンクされていない場合、シングル コントローラー メソッドからモデルを返すべきではありません。1ページに表示する必要がある場合は、この部分ビューをajaxアクションでロードできます

このクリックを行う方法の例の1つ

于 2013-11-05T09:12:26.077 に答える