web-dev-qa-db-ja.com

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

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

そして、違いは何ですか?両方とも私にとってはうまくいくようです。

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

92
Evgenyt
_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)
_
126
Annabelle

私は好む

@RenderPage("_LayoutHeader.cshtml")

以上

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

構文が簡単で読みやすいからです。それ以外は、機能的に賢明な違いはないようです。

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

17
Ryan Sampson

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

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

6
Omid Shariati

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

2
bayram
@RenderPages() 

上記はASP.NET MVCでは機能しません。 WebPagesでのみ機能します。

@Html.Partial("_Footer")

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

0
Umar Aftab