Nice programing

Html.Partial 대 Html.RenderPartial & Html.Action 대 ​​Html.RenderAction

nicepro 2020. 9. 27. 14:00
반응형

Html.Partial 대 Html.RenderPartial & Html.Action 대 ​​Html.RenderAction


ASP.NET MVC에서 다음의 차이점은 무엇입니까?

  • Html.PartialHtml.RenderPartial
  • Html.ActionHtml.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);
}

차이점은 첫 번째는 반환 MvcHtmlString하지만 두 번째 ( Render..)는 응답에 직접 출력합니다.


내가 찾은 내용은 다음과 같습니다.

뷰로 보낼 모델이없고 변수에 저장할 필요가없는 많은 html이있을 때 RenderAction을 사용 합니다.

뷰로 보낼 모델이없고 변수에 저장해야하는 약간의 텍스트가있을 때 Action을 사용 합니다.

뷰로 보낼 모델이 있고 변수에 저장할 필요가없는 많은 html이있을 때 RenderPartial을 사용 합니다.

뷰로 보낼 모델이 있고 변수에 저장해야하는 약간의 텍스트가있을 때 부분을 사용 합니다.

RenderActionRenderPartial 이 더 빠릅니다.


나에 따르면 Html.RenderPartial @Html.RenderPartial()보다 빠른 실행이 @Html.Partial()Output에 빠르게 응답합니다.

을 사용할 때 @Html.Partial()내 웹 사이트를로드하는 데 더 많은 시간이 걸립니다.@Html.RenderPartial()


@Html.Partial그리고 @Html.RenderPartial당신의 부분보기 모델은 상위 모델의 대응이 때 사용되는, 우리는이를 호출 할 조치 방법을 만들 필요가 없습니다.

@Html.Action그리고 @Html.RenderAction당신의 부분보기 모델은 상위 모델로부터 독립 할 때 페이지에있는 모든 위젯 유형의 컨텐츠를 표시 할 때 기본적으로 사용되는 사용됩니다. 뷰에서 메서드를 호출하는 동안 부분 뷰 결과를 반환하는 작업 메서드를 만들어야합니다.


질문에 대한 추가 정보 :

"Html.RenderPartial ()이 부분 뷰의 이름만으로 호출되면 ASP.NET MVC는 호출 뷰 템플릿에서 사용하는 동일한 Model 및 ViewData 사전 개체를 부분 뷰에 전달합니다."

Professional ASP.NET MVC 1.0의 "NerdDinner"


The return type of Html.RenderAction is void that means it directly renders the responses in View where the return type of Html.Action is MvcHtmlString You can catch its render view in controller and modify it by using following method

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();
        }
    }

This will return the Html string of the View.

This is also applicable to Html.Partial and Html.RenderPartial


Partial or RenderPartial: No need to create action method. use when data to be display on the partial view is already present in model of current page.

Action or RenderAction: Requires child action method. use when data to display on the view has independent model.


Differences:

  1. The return type of RenderPartial is void, where as Partial returns MvcHtmlString

  2. Syntax for invoking Partial() and RenderPartial() methods in Razor views

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

  3. Syntax for invoking Partial() and RenderPartial() methods in webform views

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

The following are the 2 common interview questions related to Partial() and RenderPartial() When would you use Partial() over RenderPartial() and vice versa?

The main difference is that RenderPartial() returns void and the output will be written directly to the output stream, where as the Partial() method returns MvcHtmlString, which can be assigned to a variable and manipulate it if required. So, when there is a need to assign the output to a variable for manipulating it, then use Partial(), else use RenderPartial().

Which one is better for performance?

From a performance perspective, rendering directly to the output stream is better. RenderPartial() does exactly the same thing and is better for performance over Partial().


Html.Partial: returns MvcHtmlString and slow

Html.RenderPartial: directly render/write on output stream and returns void and it's very fast in comparison to Html.Partial


For "partial" I always use it as follows:

If there's something you need to include in a page that you need to go via the controller (like you would with an Ajax call) then use "Html.RenderPartial".

If you have a 'static' include that isn't linked to a controller per-se and just in the 'shared' folder for example, use "HTML.partial"


@Html.Partial returns view in HTML-encoded string and use same view TextWriter object. @Html.RenderPartial this method return void. @Html.RenderPartial is faster than @Html.Partial

The syntax for PartialView:

 [HttpGet] 
 public ActionResult AnyActionMethod
 {
     return PartialView();
 }

참고URL : https://stackoverflow.com/questions/5248183/html-partial-vs-html-renderpartial-html-action-vs-html-renderaction

반응형