web-dev-qa-db-ja.com

ASP.NET MVC3かみそりテンプレートVSRenderPartial

ASP.NET MVC 3の このブログ投稿 onRazor Templatingを読みました。

簡単に言えば、私はそれを取得しません!

つまり、@RenderPartialを使用してIMOをより簡単に(そしてよりきれいに)実行できることを実現するために、この(かなり)複雑なコードが必要な理由がわかりません。

これが私が好きではないものです:

  1. テンプレートはFunc<T,HelperResult>デリゲートとして保存されますか?
  2. そのテンプレートデリゲートは、Controller ViewData(HttpContext.Current.Itemsなど)に保持されます。

そのブログから私が読んだ唯一の「利点」は、テンプレートを作成するために別のファイルが必要ないことです。つまり、再コンパイルなどする必要がありません。

しかし、私はそれを有効な議論とは見ていません。ソリューションの編成が危険にさらされない限り、追加のファイルは問題ありません。

マークアップをマスタービューから分離しておくことができ、これをインライン(レンダリング時間)とjQuery(例:AJAXイベント)の両方でレンダリングできるため、@RenderPartialを使用することを好みます。

ここで何かが足りないかもしれませんが、再利用可能なコンテンツを作成するためにRenderPartialではなくRazorテンプレートを選択する必要がある理由を誰かに教えてもらえますか?

23
RPM1984

さて、あなたはその投稿の作者にこのテクニックを提示する動機について尋ねるべきです。

それは確かにRazorで何が可能かを示しています。あなたがそれを使うべきかどうかは別の問題です。個人的には、それほど複雑ではない代替手法があると思います(リクエストコンテキスト内にFuncを格納することについてのあなたの意見に同意します)。

  • すでにおっしゃった@RenderPartialがあります。
  • @helper構文を使用することもできます(ローカルヘルパーまたはグローバルヘルパーとして)
  • Htmlヘルパーを書くことができます(そしてTagBuilderを使用して出力を組み立てます)
  • 子アクションを書くことができます
  • テンプレート化されたヘルパーを書くことができます

上記のリストを見ると、MVCでは選択肢が多すぎると思います:)

Updateインラインテンプレートがどのように役立つかをよりよく説明するために、デフォルトコードでセクションを呼び出すためにそれらを使用することについてのブログ投稿を書きました: オプションのレイザーセクションデフォルトのコンテンツを使用

これを使用して、次のようなものを書くことができます。

@this.RenderSection("OptionalSection", @<div>Default Content</div>) 
19
marcind

Razorに関する一般的な誤解は、ASP.NetMVCフレームワークのコンテキスト外では使用できないというものです。これは最も一般的なシナリオですが、かみそりエンジンのパワーはそれを超えています。

コンソールアプリまたはライブラリでかみそりのテンプレートを定義できます。単純化しすぎた例として、自動化されたHTMLメールをクライアントに送信するアプリを考えてみましょう。昔は、文字列の連結やXSLT変換などに頼っていました。いずれにせよ、マークアップを視覚的に確認することはできず、操作はメンテナンスの悪夢になります。

Razorテンプレートを使用すると、テンプレートをHTMLマークアップとして定義して、簡単に視覚化してテストすることができます。

この機能を示す優れた記事は次のとおりです。 http://www.west-wind.com/weblog/posts/2010/Dec/27/Hosting-the-Razor-Engine-for-Templating-in-NonWeb -アプリケーション

注:あなたが指摘したリンクがこれを示していると言っているのではなく、@にリストされている方法を超えたい理由の単なる例ですマーシンドの答え。

3
Mrchief