1065

ASP.NET MVC では、次の違いは何ですか:

  • Html.PartialHtml.RenderPartial
  • Html.ActionHtml.RenderAction
4

13 に答える 13

1265

Html.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

于 2011-03-09T15:44:04.490 に答える
91

@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);
}
于 2012-04-18T14:36:56.167 に答える
70

これが私が見つけたものです:

ビューに送信するモデルがなく、変数に格納する必要のない大量の html を戻す場合は、RenderActionを使用します。

ビューに送信するモデルがなく、変数に格納する必要があるテキストが少しある場合は、Actionを使用します。

ビューに送信するモデルがあり、変数に格納する必要のない多くの html がある場合は、RenderPartialを使用します。

ビューに送信するモデルがあり、変数に格納する必要があるテキストが少しある場合は、Partialを使用します。

RenderActionRenderPartialの方が高速です。

于 2015-11-18T20:55:46.540 に答える
55

違いは、最初の 1 つは を返しますMvcHtmlStringが、2 番目の ( Render..) はレスポンスに直接出力されます。

于 2011-03-09T15:44:15.083 に答える
22

@Html.RenderPartial()によると@Html.Partial()、Html.RenderPartial は Output にすばやく応答します。

を使用する@Html.Partial()と、Web サイトの読み込みに通常よりも時間がかかるため です。@Html.RenderPartial()

于 2012-02-04T04:43:00.903 に答える
16

質問の詳細:

「Html.RenderPartial() が部分ビューの名前だけで呼び出されると、ASP.NET MVC は、呼び出し元のビュー テンプレートで使用される同じ Model および ViewData ディクショナリ オブジェクトを部分ビューに渡します。」

Professional ASP.NET MVC 1.0 の「NerdDinner」

于 2012-10-02T22:05:50.597 に答える
11

違い:

  1. の戻り値の型はRenderPartialisvoidで、 asPartialは戻りますMvcHtmlString

  2. Razor ビューでの呼び出しPartial()とメソッドの構文RenderPartial()

    @Html.Partial("PartialViewName")
    @{ Html.RenderPartial("PartialViewName"); }

  3. Web フォーム ビューでの呼び出しPartial()とメソッドの構文RenderPartial()

[%: Html.Partial("PartialViewName") %]
[% Html.RenderPartial("PartialViewName"); %]

以下は、Partial()RenderPartial() に関連Partial()する2 つのよくあるインタビューの質問RenderPartial()です。

主な違いは、RenderPartial()void を返し、出力が出力ストリームに直接書き込まれることです。Partial()メソッドは を返しますMvcHtmlString。これは、変数に割り当てて、必要に応じて操作することができます。したがって、出力を操作するために変数に割り当てる必要がある場合は Partial() を使用し、それ以外の場合は RenderPartial() を使用します。

性能的にはどちらが良いですか?

パフォーマンスの観点からは、出力ストリームに直接レンダリングする方が優れています。RenderPartial()はまったく同じことを行い、 よりもパフォーマンスが優れていますPartial()

于 2016-05-13T04:03:48.307 に答える
10

の戻り値の型は、の戻り値の型が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

于 2012-09-12T06:08:01.600 に答える