かみそり:@ Html.Partial()と@RenderPage()


93

子テンプレートをレンダリングする適切な方法は何ですか?

そして、違いは何ですか?どちらもうまくいくようです。

そして、なぜ機能し@Html.RenderPartial()なくなったのですか?

回答:


127
Html.Partial("MyView")

「MyView」ビューをにレンダリングしMvcHtmlStringます。これは、ビュー検索の標準ルールに従います(つまり、現在のディレクトリを確認してから、Sharedディレクトリを確認します)。

Html.RenderPartial("MyView")

Html.Partial()出力を応答ストリームに直接書き込むことを除いて、と同じです。ビューのコンテンツはメモリにバッファリングされないため、これはより効率的です。ただし、メソッドは出力を返さないため、機能しません@Html.RenderPartial("MyView")。代わりに、コードブロックで呼び出しをラップする必要があります@{Html.RenderPartial("MyView");}

RenderPage("MyView.cshtml")

のように、指定されたビュー(ビュー名ではなくパスとファイル名で識別される)を直接応答ストリームにレンダリングしますHtml.RenderPartial()。2番目のパラメーターとして含めることにより、ビューに任意のモデルを提供できます。

RenderPage("MyView.cshtml", MyModel)

8
@ Html.RenderPartial( "MyView")に対する@ {Html.RenderPartial( "MyView");}の効率向上に関するメトリックスはありますか?
ファウスト

@Faustは、Partial vd RenderPartialを意味していましたか?
カチョサンタ2014

1
@cacho:はい、私のコメントは@Html.Partial("MyView")vs.@{Html.RenderPartial("MyView");}
Faust

2
小さな修正:RenderPage()の2番目のパラメーターはモデルではなく、PageDataプロパティを介してアクセスされるparam []オブジェクトです。デフォルトでは「親」ページのモデルが「子」に渡されるため、上記のように機能するように見えます。msdn.microsoft.com/en-us/library/...
ジョン

を呼び出すことにより、モデルに沿って完全なページをネストする方法はありRenderPageますか?特定のクエリパラメータを指定して別のページをネストし、そのページ内のデータをフィルタリングし、さらに独自のレイアウトを削除したいと考えています。
Shimmy Weitzhandler

17

私は好む

@RenderPage("_LayoutHeader.cshtml")

以上

@{ Html.RenderPartial("_LayoutHeader"); }

構文が簡単で読みやすいからです。それ以外は機能面での違いはないようです。

編集:RenderPartialの利点の1つは、パス全体やファイル拡張子を指定する必要がないことです。これにより、共通の場所が自動的に検索されます。


1
これは答えではなくコメントになると思います。またRenderPage、構文のために同意します。
Iman Mahmoudinasab 2015年

6

れるrenderPartial方法は、他のほとんどのヘルパーメソッドのようなHTMLマークアップを返しません。代わりに、コンテンツを応答ストリームに直接書き込むため、セミコロンを使用してC#の完全な行のように呼び出す必要があります。

これはとにかく応答ストリームに書き込まれるため、レンダリングされたHTMLを部分ビューからバッファリングするよりもわずかに効率的です。より一貫性のある構文が必要な場合は、Html.Partialメソッドを使用できます。これは、RenderPartialメソッドとまったく同じですが、HTMLフラグメントを返し、@ Html.Partial( "Product"、p)として使用できます。


2

部分ビューを使用してモデルを渡すこともできます。@ Html.Partial( "MyView"、 "MyModel");


0
@RenderPages() 

上記はASP.NET MVCでは機能しません。Webページでのみ機能します。

@Html.Partial("_Footer")

ASP.NET MVCで上記を使用する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.