Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction


답변:


1237

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.


71
왜 다른 것을 사용하는지 아십니까?
Jason

156
성능 측면에서는 여기에 답변 된대로 RenderPartial을 사용하는 것이 좋습니다. stackoverflow.com/questions/2729815/…
Vlad Iliescu

13
결과를 변수에 저장하는 것에 대해 감사드립니다. 이것이 렌더 상대방에 대해 부분 또는 동작을 사용하는 이유입니다.
David Kassa

8
Html.Partial()Razor와보다 유창한 구문을 갖도록 만들어졌습니다. @Vlad가 말했듯 Html.RenderPartial()이 더 효율적입니다.
Tsahi Asher

2
@Tsahi _LoginPartial의 MVC 프로젝트 템플릿에서 왜 사용되는지 설명합니다. 감사.
regularmike

86

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

3
Html.Partial이 Html.RenderPartial보다 성능이 뛰어나다는 말입니까?
numaroth 2016 년

15
예, 아니오, Html.Partial은 인라인으로 렌더링되며 리소스를 많이 사용하지 않지만 시간이 많이 걸립니다. Html.RenderPartial은 별도로 렌더링되므로 더 빠르지 만 리소스를 많이 사용합니다. 대량의 버스트 트래픽이있는 경우 리소스 사용량을 줄이려면 Html.Partial을 선호하십시오. 트래픽 양이 자주 변경되지 않으면 Html.RenderPartial을 선호하십시오.
Brett Jones

4
내 생각에, 그것은 다른 방법입니다. RenderPartial은 출력 스트림에 직접 쓸 때 확실히 더 나은 성능을 제공합니다. 부분적으로 내부적으로 동일한 메서드를 호출하지만 MvcHtmlString으로 반환되고 출력 스트림에 기록되는 StringWriter에 씁니다. 따라서 훨씬 더 많은 메모리를 할당합니다.
slfan

2
@BrettJones "자원 집약적"이란 무엇입니까? 때문에 그냥 Partial버퍼에 렌더링이 비동기 적으로 렌더링 된 것 의미하지 않는다 - 정반대을 - 당신이 주장 할 수있는 방법을 볼 수없는 것은 RenderPartial"더 많은 리소스를 많이"입니다.
Dai

57

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

뷰로 전송할 모델이없고 변수에 저장할 필요가없는 html이 많은 경우 RenderAction을 사용하십시오 .

뷰로 전송할 모델이없고 변수에 저장해야 할 텍스트가 약간있을 때 동작을 사용하십시오 .

뷰로 전송할 모델이 있고 변수에 저장할 필요가없는 많은 HTML이있을 때 RenderPartial을 사용하십시오 .

뷰로 전송할 모델이 있고 변수에 저장해야 할 텍스트가 약간있을 때 부분을 사용하십시오 .

RenderActionRenderPartial 이 더 빠릅니다.


2
답변 (왜?)이 가장 좋은 답변이므로 이것이 나에게 가장 좋습니다.
YEH

55

차이점은 첫 번째 는 응답에 직접 MvcHtmlString두 번째 ( Render..) 출력을 반환한다는 것 입니다.


MvcHtmlString도 응답에 추가되지 않습니까?
Shad

21

저에 따르면 Html @Html.RenderPartial()보다 실행 속도가 빠릅니다 @Html.Partial().RenderPartial은 출력에 대한 빠른 응답을 제공합니다.

을 (를) 사용할 때 @Html.Partial()웹 사이트를로드하는 데 시간이 더 걸리기 때문에@Html.RenderPartial()


21

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

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


3
정답 : 부분 행동을 사용할 때도 설명하기 때문에
raklos

15

질문에 대한 자세한 내용 :

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

Professional ASP.NET MVC 1.0의“NerdDinner”


9

의 반환 형식 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.PartialHtml.RenderPartial


Html.RenderPartial로 어떻게 할 수 있습니까?
xatz

1
반환 유형이 void이기 때문에
Html.RenderPartial을

9

Partial 또는 RenderPartial : 액션 메서드를 만들 필요가 없습니다. 부분보기에 표시 할 데이터가 현재 페이지의 모델에 이미 존재하는 경우 사용합니다.

액션 또는 RenderAction : 자식 액션 메서드가 필요합니다. 뷰에 표시 할 데이터에 독립 모델이있는 경우 사용합니다.


8

차이점 :

  1. 의 반환 형식 RenderPartial입니다 void곳으로, Partial반환MvcHtmlString

  2. Razor보기에서 호출 Partial()RenderPartial()메소드에 대한 구문

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

  3. 웹폼보기에서 호출 Partial()RenderPartial()메소드에 대한 구문

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

다음은 관련이 개 일반적인 면접 질문들 Partial()RenderPartial() 언제 사용하는 것이 Partial()이상 RenderPartial()반대와 반대?

가장 큰 차이점은 RenderPartial()void 를 반환하고 출력이 출력 스트림에 직접 기록된다는 것입니다. 여기서 Partial()메소드가 반환 MvcHtmlString할 때 변수에 할당하고 필요한 경우 조작 할 수 있습니다. 따라서 출력을 조작하기 위해 변수에 출력을 할당해야하는 경우 Partial ()을 사용하고 그렇지 않으면 RenderPartial ()을 사용하십시오.

어느 것이 성능에 더 좋습니까?

성능 관점에서 출력 스트림으로 직접 렌더링하는 것이 좋습니다. RenderPartial()정확히 같은 기능을 수행하며 성능이 향상됩니다 Partial().


5

Html.Partial: 리턴 MvcHtmlString및 느림

Html.RenderPartial: 출력 스트림에서 직접 렌더링 / 쓰기 및 반환 void하며 다음과 비교할 때 매우 빠릅니다.Html.Partial


3

"부분"의 경우 항상 다음과 같이 사용합니다.

Ajax 호출에서와 같이 컨트롤러를 통해 이동해야하는 페이지에 포함해야 할 것이 있으면 "Html.RenderPartial"을 사용하십시오.

예를 들어 컨트롤러 자체에 연결되지 않고 '공유'폴더에있는 '정적'포함이있는 경우 "HTML.partial"


2

@Html.PartialHTML 인코딩 문자열로 뷰를 반환하고 동일한 뷰 TextWriter객체를 사용 합니다. @Html.RenderPartial이 메소드는를 돌려줍니다 void. @Html.RenderPartial보다 빠르다@Html.Partial

에 대한 구문 PartialView:

 [HttpGet] 
 public ActionResult AnyActionMethod
 {
     return PartialView();
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.