0

ユーザーがデータの表示方法を選択できるページを作成したいと考えています。つまり、サマリー (グループ化をサポート)、グリッド (グループ化をサポート)、テーブル (グループ化をサポート)、マップ、タイムライン、 xml、json など

現在、各レイアウトはおそらく、共通の基本クラス/ビューモデルから継承する異なるビューモデルを使用しています。その理由は、各レイアウトが扱うオブジェクト構造が異なる必要があるためです (階層的な構造が必要な場合もあれば、よりフラットな構造が必要な場合もあります)。

各レイアウトは同じリポジトリ メソッドを呼び出し、各レイアウトは同じ機能、つまり検索とフィルタリングをサポートします (したがって、これらのコントロールはレイアウト間で共有されます)。これに対する主な例外は、グリッド ビューとテーブル ビューのみをサポートする必要がある並べ替えです。

今、私の質問は、人々が最善のアプローチであると考えるものです。

  • DisplayFor を使用してさまざまなタイプのレンダリングを処理しますか?
  • また、アクションでこれをどのように処理するのですか... 1 つのアクションを使用して、レイアウト タイプを渡すと想像しますが、これは、概要、グリッド、およびテーブル ビューに必要なグループ化をどのようにサポートしますか。
  • 各グループを単なるレイアウト タイプとして扱うか
  • また、これは URL の観点からどのように機能しますか? このレイアウト機能をサポートするテンプレートは何だと人々は考えていますか?

乾杯アンソニー

4

2 に答える 2

0

概念的には、View はデータの表示を処理する MVC Web アプリの一部です。したがって、さまざまな方法でデータを表示したい場合は、各「表示」に対応する独自の aspx ビューを用意するのが最も論理的です。

すべてのビュー モデルは、同じ基本モデルから継承できます。たとえば、4 つのモデルと 3 つのビューがあるとします。

public abstract class BaseViewModel {}
public class GridViewModel : BaseViewModel {}
public class TableViewModel : BaseViewModel {}
public class SummaryViewModel : BaseViewModel {}

GridViewPage<GridViewModel>
TableViewPage<TableViewModel>
SummaryViewPage<SummaryViewModel>

各ビューには異なるスタイルシートと JavaScript ファイルを添付できるため、必要に応じて DisplayFor を使用したり、手動でレイアウトを作成したりできます。

コントローラーに関しては、3 つのビューのいずれかを返す 1 つのアクション メソッドを作成するか、ビューごとに 1 つずつ、3 つの個別の ActionResult を作成することができます。「モノリシック」ActionResult は次のとおりです。

public ActionResult PageViewResult(string pageType)
{
    switch (pageType)
    {
        //define your cases, return your views and your models
        //make sure to set a default
    }
}

適切と思われる方法でルートをフォーマットできます。たとえば、上記の「モノリシック」ActionResult では、Global.asax ファイルに次のルートを作成できます。

    routes.MapRoute(
        "FormattedViewPage", // Route name
        "View/Page/{pageType}", // URL with parameters
        new { controller = "ViewPageController", action = "PageViewResult", pageType = "grid" } // Parameter defaults
    );

お役に立てれば。ご不明な点がございましたら、お知らせください。

于 2010-05-18T06:59:54.403 に答える
0

まず、同じデータの場合、すべてのビューに同じモデルを使用しようとしますが、ユーザーがデータを表示する方法に応じて、モデルをレンダリングするために異なる css または異なる aspx ページ/コントロールを使用します。

また、JavaScript でこれをどの程度行うことができるかを調べることもできます。それはすべて、ユーザー エクスペリエンスをどれだけ豊かにしたいかによって異なります。

于 2010-05-18T02:56:56.583 に答える