95

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

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

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

4

5 に答える 5

130
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)
于 2011-06-15T17:25:52.887 に答える
17

私は好きです

@RenderPage("_LayoutHeader.cshtml")

以上

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

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

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

于 2011-03-18T20:58:09.307 に答える
6

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

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

于 2013-01-26T06:53:33.830 に答える
2

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

于 2014-08-12T21:43:52.810 に答える