MVC アプリケーションのどこにマスター ページのコードを配置するか?
-
09-06-2019 - |
質問
ASP.NET MVC アプリケーションでいくつか (2 または 3) のマスター ページを使用しており、それぞれのマスター ページにデータベースからの情報を表示する必要があります。スポンサーのリスト、現在の資金調達状況など。
そこで私の質問は、これらのマスター ページ データベース呼び出しコードをどこに配置すればよいでしょうか?
通常、これらは独自のコントローラー クラスに入れる必要がありますよね?しかし、それは手動で接続する必要があることを意味します(例:これは、MVC フレームワークによって提供される通常のルーティング フレームワークの範囲外であるためです。
ViewData の受け渡し/Action 呼び出しをマスター ページに手動で配線したり、フレームワークをサブクラス化したりせずに、これをきれいに行う方法はありますか?
資料の量が非常に少ないのですが…私は MVC 自体の概念を含め、これらすべてについて非常に初心者なので、これに関するヒント/テクニックを共有してください。
解決
これを行う 1 つの方法は、マスターページ ビューに ViewData のフックを配置し、 BaseController を定義することです。必要なすべての DB 呼び出しを実行するコントローラー (または複数の基本クラス)。
あなたがやりたいことは、で説明されているものとまったく同じです これ 記事。
これがお役に立てば幸いです!
よろしく
他のヒント
素晴らしい質問です。いくつかのオプションが利用可能です。
- マスターページで jQuery 呼び出しを実行し、コントローラーから必要なデータを取得し、再度 jQuery を使用してフィールドに値を設定します。
- 2 番目のオプションは、コントローラーを独自に呼び出して情報を入力するユーザー コントロールを作成することです。
最良の選択は、データを入力する必要があるマスターページの領域にコントロールを作成することだと思います。したがって、マスターページにはデザイン要素が厳密に含まれるようになります。幸運を。
厳密に型指定されたビュー データを気にしない場合は、すべてのマスター ページ データを viewData の共通の基本クラスに配置できます。このデータは基本クラスのコンストラクターで設定できます。追加データを必要とするすべてのビューには、この基本クラスから継承する厳密に型指定されたビューデータが必要になります。
明示的なビューデータなしでコントローラーで View() を呼び出すことができるようにするには、ControllerBase で View をオーバーライドします。
protected override ViewResult View(string viewName, string masterName, object model)
{
if (model == null)
{
model = new ViewDataBase();
}
return base.View(viewName, masterName, model);
}