ASP.NET MVCでは、以下の違いは何ですか?
Html.Partial
そしてHtml.RenderPartial
Html.Action
そしてHtml.RenderAction
ASP.NET MVCでは、以下の違いは何ですか?
Html.Partial
そして Html.RenderPartial
Html.Action
そして Html.RenderAction
回答:
Html.Partial
文字列を返します。内部的にHtml.RenderPartial
呼び出しWrite
て戻りますvoid
。
基本的な使用法は次のとおりです。
// 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()
Razorでより流暢な構文を持つように作成されました。@Vladが言ったように、Html.RenderPartial()
より効率的です。
@ 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);
}
Partial
バッファへのレンダリングが非同期でレンダリングされることを意味しないからといって-まったく反対です-どのようにしてRenderPartial
「より多くのリソースを消費する」と主張できるかわかりません。
これが私が見つけたものです:
RenderActionを使用するビューに送信するモデルがなく、変数に格納する必要のない大量のHTMLを戻す場合は、します。
ビューに送信するモデルがなく、変数に格納する必要があるテキストを少し戻す場合は、Actionを使用します。
RenderPartialを使用するビューに送信するモデルがあり、変数に格納する必要のない多くのHTMLがある場合は、します。
部分的に使用ビューに送信するモデルがあり、変数に格納する必要のあるテキストが少しある場合は、します。
RenderActionとRenderPartialの方が高速です。
@Html.Partial
そして@Html.RenderPartial
、あなたのパーシャルビューモデルは、親モデルの対応があるときに使用されている、我々はこれをコールする任意のアクションメソッドを作成する必要はありません。
@Html.Action
そして@Html.RenderAction
、あなたの部分図のモデルは、親モデルから独立しているときに、ページ上の任意のウィジェットタイプのコンテンツを表示する場合、基本的にはそれが使用され、使用されています。ビューからメソッドを呼び出しているときに、ビュー結果の一部を返すアクションメソッドを作成する必要があります。
戻り値の型がHtml.RenderAction
ありvoid
、それが直接の戻り値の型は、ビューで応答をレンダリングしている手段Html.Action
である MvcHtmlString
あなたは、コントローラにそのレンダービューをキャッチし、次の方法を使用して、それを修正することができます
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();
}
}
これはビューのHTML文字列を返します。
これはにも適用さHtml.Partial
れますHtml.RenderPartial
違い:
戻り型がRenderPartial
あるvoid
場合など、Partial
リターンMvcHtmlString
Razorビューでの呼び出しPartial()
とRenderPartial()
メソッドの構文
@ Html.Partial( "PartialViewName")
@ {Html.RenderPartial( "PartialViewName"); }
Webフォームビューでの呼び出しPartial()
とRenderPartial()
メソッドの構文
[%:Html.Partial( "PartialViewName")%]
[%Html.RenderPartial( "PartialViewName"); %]
以下はに関連した2つの共通インタビューの質問ですPartial()
とRenderPartial()
するときは、使用するPartial()
以上RenderPartial()
、その逆も?
主な違いはRenderPartial()
void を返し、出力は出力ストリームに直接書き込まれるということです。Partial()
メソッドがを返すMvcHtmlString
ので、変数に割り当て、必要に応じて操作できます。したがって、操作のために出力を変数に割り当てる必要がある場合は、Partial()を使用します。それ以外の場合は、RenderPartial()を使用します。
どちらがパフォーマンスに優れていますか?
パフォーマンスの観点からは、出力ストリームに直接レンダリングする方が優れています。RenderPartial()
まったく同じことを行い、パフォーマンスよりも優れていますPartial()
。