Razor : @ Html.Partial () 대 @RenderPage ()


93

자식 템플릿을 렌더링하는 적절한 방법은 무엇입니까?

그리고 차이점은 무엇입니까? 둘 다 나를 위해 일하는 것 같습니다.

@Html.RenderPartial()더 이상 작동 하지 않습니까?

답변:


127
Html.Partial("MyView")

"MyView"보기를 MvcHtmlString. 보기 조회에 대한 표준 규칙을 따릅니다 (즉, 현재 디렉터리를 확인한 다음 Shared디렉터리 를 확인 ).

Html.RenderPartial("MyView")

Html.Partial()출력을 응답 스트림에 직접 기록한다는 점을 제외하고 와 동일 합니다. 뷰 콘텐츠가 메모리에 버퍼링되지 않기 때문에 더 효율적입니다. 그러나 메서드가 출력을 반환하지 않기 때문에 작동하지 않습니다 @Html.RenderPartial("MyView"). 대신 코드 블록에서 호출을 래핑해야합니다 @{Html.RenderPartial("MyView");}..

RenderPage("MyView.cshtml")

지정된 뷰 (뷰 이름이 아닌 경로 및 파일 이름으로 식별 됨)를 응답 스트림에 직접 렌더링합니다 (예 : Html.RenderPartial(). 두 번째 매개 변수로 포함하여 원하는 모델을 뷰에 제공 할 수 있습니다.

RenderPage("MyView.cshtml", MyModel)

8
@ Html.RenderPartial ( "MyView")에 비해 @ {Html.RenderPartial ( "MyView");}의 효율성 향상에 대한 메트릭이 있습니까?
파우스트

@Faust 당신은 부분 vd RenderPartial을 의미 했습니까?
Cacho Santa

1
@cacho : 예, 내 의견은 @Html.Partial("MyView")대 를 읽어야합니다 .@{Html.RenderPartial("MyView");}
Faust

2
작은 수정 : RenderPage ()의 두 번째 매개 변수는 모델이 아니며, PageData 속성을 통해 액세스되는 param [] 개체입니다. 기본적으로 "부모"페이지의 모델이 "하위"로 전달되기 때문에 위와 같이 작동하는 것처럼 보입니다. msdn.microsoft.com/en-us/library/…
Jon

를 호출하여 모델을 따라 전체 페이지를 중첩하는 방법이 RenderPage있습니까? 특정 쿼리 매개 변수를 지정하여 다른 페이지를 중첩하고 싶습니다. 그러면 해당 페이지의 데이터를 필터링하고 자체 레이아웃을 제거합니다.
Shimmy Weitzhandler

17

나는 선호한다

@RenderPage("_LayoutHeader.cshtml")

위에

@{ Html.RenderPartial("_LayoutHeader"); }

구문이 더 쉽고 읽기 쉽기 때문입니다. 그 외에는 기능적으로 현명한 차이가없는 것 같습니다.

편집 : RenderPartial의 한 가지 장점은 전체 경로 또는 파일 확장명을 지정할 필요가 없다는 것입니다. 그러면 자동으로 공통 위치를 검색합니다.


1
대답이 아닌 댓글이어야한다고 생각합니다. 또한 RenderPage구문 때문에 동의 합니다.
Iman Mahmoudinasab

6

RenderPartial 방법은 대부분의 다른 헬퍼 메소드와 같은 HTML 마크 업을 반환하지 않습니다. 대신 응답 스트림에 콘텐츠를 직접 작성하므로 세미콜론을 사용하여 전체 C # 줄처럼 호출해야합니다.

어쨌든 응답 스트림에 기록되므로 부분보기에서 렌더링 된 HTML을 버퍼링하는 것보다 약간 더 효율적입니다. 보다 일관된 구문을 선호하는 경우 Html.Partial 메서드를 사용할 수 있습니다.이 메서드는 RenderPartial 메서드 와 정확히 동일 하지만 HTML 조각을 반환하며 @ Html.Partial ( "Product", p)로 사용할 수 있습니다.


2

부분보기를 사용하여 모델을 전달할 수도 있습니다. @ Html.Partial ( "MyView", "MyModel");


0
@RenderPages() 

위의 내용은 ASP.NET MVC에서 작동하지 않습니다. 웹 페이지에서만 작동합니다.

@Html.Partial("_Footer")

ASP.NET MVC에서 위의 코드를 사용해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.