2011-03-02 16 views
7

新しいRazor構文を使用してASP.NET MVC3で表形式の表示テンプレートを作成する良い方法はありますか?ASP.NET MVC 3 Razorを使用した再利用可能なテーブル表示テンプレート

ASP.NET MVC 2では、Phil Haackがブログtabular display templatesでブログしていました。 ASP.NET MVC3でより良いアプローチがありますか?

EDIT:

モデルのメタデータに基づいてグリッドを描画することも可能ですか? WebGrid APIを使用して列を手動で定義するのではなく、モデルのメタデータを使用します。私が見ている問題は、WebGrid APIを使用して毎回手動でテーブルを定義する必要があることです。 のテーブルを持っている可能性があります。

編集: モデルメタデータを使用してグリッドを作成するための良い方法はありますか?

+0

TelerikのオープンソースMVCグリッド[source](http://telerikaspnetmvc.codeplex.com/)、[demo](http://demos.telerik.com/aspnet-mvc/grid)をご覧ください。 –

+0

商用非オープンソースプロジェクトでグリッドを使用することはできますか? – Rookian

+1

"Telerik Extensions for ASP.NET MVCオープンソースGPLを使用している場合は、GPL v2.0に記載されている再配布権に従うことが義務付けられています。 Telerik Extensions for ASP.NET MVCコマーシャルライセンスアプリケーションのソースコードを共有することなく、Telerik製品をアプリケーションの一部として再配布することができます。 http://www.telerik.com/purchase/faqs/aspnet-mvc.aspx –

答えて

0

new WebGrid helperをご覧ください。

+0

私の質問が更新されました。 WebGridヘルパーは、モデルのメタデータを使用すると非常に醜いようです:(http://stackoverflow.com/questions/4874544/asp-net-mvc3-webgrid-helper-and-model-metadata – Rookian

7

あなたはMVC3の新しいWebGridを使用することができます。

@{ 
    var grid = new WebGrid(Model); 
    @grid.GetHtml(); 
} 

をそして、あなたはjQueryのタブを使用することができます:http://jqueryui.com/demos/tabs、タブページを作成します。

ご迷惑をおかけして申し訳ございません。

+0

tabular =テーブルまで私が知っている限り:) – Rookian

+0

@Rookian、私は恐れている... :) –

+0

私の編集した質問を見てください。 – Rookian

0

また、telerikグリッドとタブストリップMVCコンポーネントの使用を検討する場合は、their demosをチェックしてください。

1

私はそれをあまり使用しませんでしたが、使用する前にまずMVC 3のWebGridをセットアップする必要があります。また、ビュー内にテーブルを設定するのではなく、モデル属性を使用してテーブルを設定する必要があります。

私はどこ私は次の操作を実行することを行うにする場合:

  • 私のカスタムを作成し、私は性質が列である定義するために私のモデルを飾ることになると属性が、どのようなラベルは列ヘッダーのために使用され、あなたが設定したいもの。

  • モデルインスタンスを取り込み、リフレクションを使用してプロパティとカスタム属性を読み込む静的メソッドを作成し、ビューから使用するためにWebGridを吐き出します。

だこと私はこれをしないだろう、なぜ私はあなたを教えてあげる方法:MVCであなたが検証のようなもののためにあなたのモデルを飾ると、それは素晴らしいと宣言型です。しかし、グリッドを定義するとき、これは非常にビュー固有のものです。確かにビュー固有のViewModelsを使用しているかもしれませんが、テーブルレイアウトの設定はモデルにはないと思います。すでに動作する前のWebGridやTelerikのグリッドは既に既にうまく宣言されています。

短いWebGridとTelerik's Gridは、宣言的で流暢なインターフェイスを提供して、テーブルの構造と動作を定義することで、ベストプラクティスを既に使用しています。各テーブルは異なるので、各テーブルを定義していることは意味があります。あなたは「手で」と言いますが、グリッドがあなたのためにすべての汚い作業をしているので、これは大したことではありません。あなたが望むものを宣言しているだけです(宣言的プログラミング)。

+0

モデルのメタデータを使用すると、より多くの欠点があるようです私の利益よりも。たとえば、国際化(multy言語)をサポートする必要がある場合、テキストを表示するための属性を使用するのは醜いです。 – Rookian

+0

@Rookian:ローカライゼーションにテキスト属性を使用するのは醜いです。残念ながら、MVC 3以前は、DisplayAttributeを継承し、リソースファイルから文字列を取得することで、独自のデータ属性の実装を指定する必要がありました(パラメータとしてリソースタイプとリソースキーを渡します)。これは1回書き込みに10分かかり、再利用することができます。幸運にも、これはMVC 3で解決され、MVC 2リリースとモデルデコレーション属性の間で競合する日付のために無視されたDisplayAttribute(resourceKey、resourceType)オーバーロードをサポートしています。 –

0

私はjQuery templatesが好きです。あなたはJSONオブジェクトを渡す必要があり、残りの作業を行います。並べ替え、ページ作成などに適しています。

0

ちょうどこの答えは同様のソリューションを探していました。私もかかわらず、再利用可能な何かを期待して、そのカルマンの回答に基づいて単純なテンプレートを作成することになった、それはこのようになりました:

@model IEnumerable<object> 
@{WebGrid grid = new WebGrid(Model);} 
@grid.GetHtml() 

ビュー/ DisplayTemplates/Table.cshtml

使用

これは、プロパティに[DataType("Table")]を追加することで、コレクションのモデルメタデータでも機能するはずです。

+1

これは非常に不自由な解決策であることが判明しました。 Webgridはデータアノテーションをサポートしていないため、非常に限定されています。私はここにそれを残すだろうそれは誰の誰にも使用の場合です – Phil

関連する問題