MVC2에서 Html.Partial (view, model)과 Html.RenderPartial (view, model)의 차이점은 무엇입니까?


141

그것이 반환하는 유형과 당신이 그것을 다르게 부르는 사실 이외

<% Html.RenderPartial(...); %>
<%= Html.Partial(...) %>  

서로 다른 경우 왜 다른 전화가 아닌 다른 전화를 하시겠습니까?
정의 :

// Type: System.Web.Mvc.Html.RenderPartialExtensions
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

using System.Web.Mvc;

namespace System.Web.Mvc.Html
{
    public static class RenderPartialExtensions
    {
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName);
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, ViewDataDictionary viewData);
        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model);

        public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model,
                                     ViewDataDictionary viewData);
    }
}

// Type: System.Web.Mvc.Html.PartialExtensions
// Assembly: System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
// Assembly location: C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

using System.Web.Mvc;

namespace System.Web.Mvc.Html
{
    public static class PartialExtensions
    {
        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName,
                                        ViewDataDictionary viewData);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model);

        public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model,
                                        ViewDataDictionary viewData);
    }
}

답변:


168

유일한 차이점은을 Partial반환하고 MvcHtmlString내부 <%= %>에서 호출 해야하는 반면 RenderPartial반환 void하고 뷰로 직접 렌더링한다는 것입니다.

소스 코드 를 보면 둘 다 동일한 내부 메소드를 호출하여 렌더링 할 StringWriter를 전달 함을 알 수 있습니다.

Partial생성 된 HTML을 페이지에 쓰지 않고 보거나 저장하거나 조작하려면 호출 합니다.


좋아, 그래서 내가 생각 한대로 :)가 없다, 나는 그것들을 완벽하게 사용할 수 있다고 생각한다. 감사합니다 :)
Stéphane

40
SLaks가 말했듯이 차이점은 반환 유형입니다. 이것은 사소한 것이 아닙니다. 성능 측면에서 출력 스트림으로 직접 렌더링하는 것이 더 낫다는 주장이 있습니다 (이것이 void RenderPartial과 함께 시작된 이유입니다). SLaks가 말했듯이 부분은 테스트에서 주로 유용합니다 (imo). 프로덕션 코드에서 렌더링하기 전에 출력을 조작해야 할 곳이있을 수 있습니다. 그들은 아주 드,니다.
Paul

42
컨트롤러에서 뷰의 출력을 얻으려는 경우에도 부분이 유용합니다. 보기를 사용하여 이메일을 형식화하는 데 사용할 수 있습니다.
Samg

3
@Paul : 우리는 얼마나 더 많은 성과를 내고 있습니까? 클레임에 관련된 테스트 또는 벤치 마크가 있습니까? 이것에 실제 고기가 있는지 또는 미세 최적화인지 확인하는 것이 흥미로울 것입니다.
Chris Pratt

1
내가 가진 질문은 둘 다 동일한 내부 메소드를 호출하는 경우 Razor에서 렌더링 된 뷰의 TextWriter로 전송하는 것을 호출하지 않기 때문에 어떤 것을 사용하든 결과 스트림에 렌더링되는 것입니다. 하나는 다른 것보다 더 성능이 좋을까요? 자체 내부 버퍼가 회전하여 필요합니까 (필요에 따라 점진적으로 확장 될 예정입니까)? 또한 다른 사람이 뷰 모델을 사용하여 전자 메일을 렌더링하는 데 사용한 것을 보니 기쁩니다. 다른 개발자는 내가 과도하다고 생각했지만 모든 것을 피해야하는 스트링보다 더 깨끗하고 조작하기 쉽습니다.
Allen Clark Copeland Jr

4

이것은 Dino Esposito의 훌륭한 설명입니다.

두 방법의 차이점은 작고 무해 해 보일 수 있지만 처리 방법을 모른다면 물릴 수 있습니다. 두 방법의 주요 차이점은 다음과 같습니다.

  • Partial HTML로 인코딩 된 문자열을 반환
  • RenderPartialA는 응답 출력 스트림에 직접 기록 보이드 방법.

두 방법의 사용법은 약간 다릅니다.

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

사용할 선택은 요구 사항에 따라 다릅니다. 응답 스트림에 주입되는 문자열을 추가로 조작해야하는 경우 Partial; 그렇지 않으면 RenderPartial 어떤 것만가집니다. 스트림보다 약간 빠릅니다 Partial.

결국, 부분 뷰의 유스 케이스는 두 캠프 중 하나에 해당합니다. 첫 번째는 아래와 같이 다양한 독립적 인 마크 업을 구성하여 뷰를 만드는 경우입니다.

<body>
    @{ Html.RenderPartial("_Header"); }
    @Html.Partial("_Sidebar")
    <div class="container body-content">
       @RenderBody()
    </div>
    @{ Html.RenderPartial("_Footer"); }
</body>

이 경우 최종 효과 중 하나를 선택 RenderPartial하거나 Partial변경하지 않습니다. 그러나 RenderPartial약간 빠르기 때문에 사용하는 것이 좋습니다.


4
-1 다른 출처에서 복사 할 때는 최소한 크레딧을 제공하십시오. 이것은 Pro ASP.NET MVC 3 Framework (또는 최소한 최신 버전)의 명백한 단어 별 사본입니다.
Robotron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.