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 は、親ページにコピーされた 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」
違い:
の戻り値の型はRenderPartial
isvoid
で、 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.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();
}
}
これにより、View の Html 文字列が返されます。
Html.Partial
これは、およびにも適用されます。Html.RenderPartial