ASP.NET MVC では、次の違いは何ですか:
Html.PartialとHtml.RenderPartialHtml.ActionとHtml.RenderAction
ASP.NET MVC では、次の違いは何ですか:
Html.PartialとHtml.RenderPartialHtml.ActionとHtml.RenderActionHtml.Partial文字列を返します。は内部的にHtml.RenderPartial呼び出し、 を返します。Writevoid
基本的な使い方は次のとおりです。
// Razor syntax
@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName"); }
// WebView syntax
<%: Html.Partial("ViewName") %>
<% Html.RenderPartial("ViewName"); %>
上記のスニペットでは、両方の呼び出しで同じ結果が得られます。
の出力を変数に格納しHtml.Partialたり、メソッドから返すことはできますが、 ではこれを行うことはできませHtml.RenderPartialん。
Response結果は、実行/評価中にストリームに書き込まれます。
Html.Actionこれはとにも当てはまりますHtml.RenderAction。
@Html.Partial は、親ページにコピーされた HTML コードと考えてください。@Html.RenderPartial は、親ページに組み込まれた .ascx ユーザー コントロールと考えてください。.ascx ユーザー コントロールには、はるかに多くのオーバーヘッドがあります。
「@Html.Partial」は、親とインラインで構築される html でエンコードされた文字列を返します。親のモデルにアクセスします。
'@Html.RenderPartial'は、.ascx ユーザー コントロールに相当するものを返します。ページの ViewDataDictionary の独自のコピーを取得し、RenderPartial の ViewData に加えられた変更は、親の ViewData には影響しません。
リフレクションを使用すると、次のことがわかります。
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData)
{
MvcHtmlString mvcHtmlString;
using (StringWriter stringWriter = new StringWriter(CultureInfo.CurrentCulture))
{
htmlHelper.RenderPartialInternal(partialViewName, viewData, model, stringWriter, ViewEngines.Engines);
mvcHtmlString = MvcHtmlString.Create(stringWriter.ToString());
}
return mvcHtmlString;
}
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName)
{
htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer, ViewEngines.Engines);
}
これが私が見つけたものです:
ビューに送信するモデルがなく、変数に格納する必要のない大量の html を戻す場合は、RenderActionを使用します。
ビューに送信するモデルがなく、変数に格納する必要があるテキストが少しある場合は、Actionを使用します。
ビューに送信するモデルがあり、変数に格納する必要のない多くの html がある場合は、RenderPartialを使用します。
ビューに送信するモデルがあり、変数に格納する必要があるテキストが少しある場合は、Partialを使用します。
RenderActionとRenderPartialの方が高速です。
違いは、最初の 1 つは を返しますMvcHtmlStringが、2 番目の ( Render..) はレスポンスに直接出力されます。
私@Html.RenderPartial()によると@Html.Partial()、Html.RenderPartial は Output にすばやく応答します。
を使用する@Html.Partial()と、Web サイトの読み込みに通常よりも時間がかかるため です。@Html.RenderPartial()
質問の詳細:
「Html.RenderPartial() が部分ビューの名前だけで呼び出されると、ASP.NET MVC は、呼び出し元のビュー テンプレートで使用される同じ Model および ViewData ディクショナリ オブジェクトを部分ビューに渡します。」
Professional ASP.NET MVC 1.0 の「NerdDinner」
違い:
の戻り値の型はRenderPartialisvoidで、 asPartialは戻りますMvcHtmlString
Razor ビューでの呼び出しPartial()とメソッドの構文RenderPartial()
@Html.Partial("PartialViewName")
@{ Html.RenderPartial("PartialViewName"); }
Web フォーム ビューでの呼び出しPartial()とメソッドの構文RenderPartial()
[%: Html.Partial("PartialViewName") %]
[% Html.RenderPartial("PartialViewName"); %]
以下は、Partial()とRenderPartial()
に関連Partial()する2 つのよくあるインタビューの質問RenderPartial()です。
主な違いは、RenderPartial()void を返し、出力が出力ストリームに直接書き込まれることです。Partial()メソッドは を返しますMvcHtmlString。これは、変数に割り当てて、必要に応じて操作することができます。したがって、出力を操作するために変数に割り当てる必要がある場合は Partial() を使用し、それ以外の場合は RenderPartial() を使用します。
性能的にはどちらが良いですか?
パフォーマンスの観点からは、出力ストリームに直接レンダリングする方が優れています。RenderPartial()はまったく同じことを行い、 よりもパフォーマンスが優れていますPartial()。
の戻り値の型は、の戻り値の型がHtml.RenderActionである voidビューで応答を直接レンダリングすることを意味します。コントローラーでそのレンダリング ビューをキャッチし、次のメソッドを使用して変更できます。Html.ActionMvcHtmlString
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
これにより、View の Html 文字列が返されます。
Html.Partialこれは、およびにも適用されます。Html.RenderPartial