-1

フレームワークのドキュメントで通常目にするのは、各ページが 1 つのモデルと 1 つのコントローラーのみに関連する単純なブログのようなアプリケーションです。

1 つのページに異なるモデルの情報を表示する必要がある最も一般的なケースにどう対処すればよいでしょうか?

例:

以下を表示するソーシャル ネットワークのホームページ:

  • 最近のユーザー投稿
  • 最近のユーザー
  • 管理人からのお知らせ
  • 最もプレイされたゲーム

これは、さまざまなモデルからこのすべての情報をロードし、パーシャル/要素に分割される可能性のあるビューに送信する単一のコントローラーによって処理されることになっていますか?

誰かが別の質問で、このようなページの HomePageController のようなものを作成できると言いました。そのすべての情報をサイトのすべてのページのサイドバーに表示する必要がある場合はどうすればよいですか?

4

3 に答える 3

0

ここにはいくつかのオプションがあります。ロードするデータの種類によって異なります。いずれかのデータ リクエストに時間がかかる場合、すべてのデータが収集されるまでビューは表示されません。ビューを部分的に分割し、非同期でロードできるようにすると、ユーザーの UX が向上します。このようにして、SRPのようなパターンに準拠した、個別のコントローラー/コントローラー メソッドを持つことができます。

すべてのデータをすべてのページのサイドバーに表示する場合は、1 つのコントローラーで処理する方が簡単な解決策になるかもしれませんが、読み込んでいるデータと、特にそれにかかる時間を確認することをお勧めします。すべてのデータをロードします。これがあなたの質問に答えるか、正しい道にあなたを導くことを願っています.

于 2013-11-14T14:40:22.190 に答える
0

SRP に従う別の方法は、MVC 子アクションを使用することです。

多くのモデルとコントローラーを作成します。独自のビジネスロジックを担当する各コントローラー。

  • 投稿コントローラー
  • ニュースコントローラー
  • ゲームコントローラー
  • ホームコントローラー

HomePage.cshtml をレンダリングする HomeController から開始

<div>@Html.Partial("Login.cshtml", Model.CurrentUser)</div>
<div>
    <hgroup>
        <h2>what's new</h2>
    </hgroup>
    <div>@Html.Action("WhatNew", "News")</div>
    <div>@Html.Action("RecentlyPosted", "Posts")</div>
</div>
<aside>
    <h2>Games</h2>
    <div>@Html.Action("MostPlayed", "Games")</div>
</aside>

多くのコントローラー/アクション名のリストを HomeController の文字列として取得し、メイン ページで複数の子アクションをレンダリングすることができます。

于 2013-11-15T04:21:35.847 に答える