[.net] Html.Partial対Html.RenderPartialおよびHtml.Action対Html.RenderAction



Answers

@ 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);
}
Question

ASP.NET MVCでは、次の違いがあります。

  • Html.PartialおよびHtml.RenderPartial
  • Html.ActionおよびHtml.RenderAction



相違点:

  1. RenderPartialの戻り値の型はvoid 。ここでPartialMvcHtmlString返します。

  2. RazorビューでPartial()およびRenderPartial()メソッドを呼び出すための構文

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

  3. WebformビューでPartial()およびRenderPartial()メソッドを呼び出すための構文

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

Partial()RenderPartial()関連する2つの一般的なインタビューの質問は次のとおりですRenderPartial()RenderPartial()使用するのはいつですか?

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

パフォーマンスのためにどちらが良いですか?

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




"partial"の場合、私はいつも以下のように使います:

Ajax呼び出しのように、コントローラを経由しなければならないページに含める必要があるものがある場合は、 "Html.RenderPartial"を使用します。

コントローラーにリンクされていない「静的な」インクルードがあり、例えば「共有」フォルダーにある場合は、「HTML.partial」を使用してください。




ここに私が見つけたものがあります:

ビューに送信するモデルを持たず、変数に格納する必要のないたくさんのhtmlを持っている場合は、 RenderActionを使用してください。

ビューに送信するモデルがなく、変数に格納する必要があるテキストを戻すための少しのモデルがある場合は、 アクションを使用します。

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

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

RenderActionRenderPartialはより高速です。




@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も適用されHtml.Partial






Related