부분 뷰Partial Views

Steve Smith, Maher JENDOUBI, 및 Rick AndersonBy Steve Smith, Maher JENDOUBI, and Rick Anderson

ASP.NET Core MVC는 재사용 가능한 파트의 서로 다른 뷰 간에 공유 하려는 웹 페이지에 있는 경우에 유용 부분 뷰를 지원 합니다.ASP.NET Core MVC supports partial views, which are useful when you have reusable parts of web pages you want to share between different views.

보거나 다운로드 샘플 코드 (다운로드 하는 방법을)View or download sample code (how to download)

부분 뷰는 무엇입니까?What are Partial Views?

부분 뷰는 다른 뷰 내에서 렌더링 되는 뷰입니다.A partial view is a view that is rendered within another view. 부분 뷰를 실행 하 여 생성 된 HTML 출력을 호출 (또는 부모) 보기에 렌더링 됩니다.The HTML output generated by executing the partial view is rendered into the calling (or parent) view. 부분 뷰 같이 뷰를 사용 하 여는 .cshtml 파일 확장명입니다.Like views, partial views use the .cshtml file extension.

부분 뷰는 경우 사용 해야 합니까?When Should I Use Partial Views?

부분 뷰는 효과적으로 큰 뷰를 더 작은 구성 요소로 분리 합니다.Partial views are an effective way of breaking up large views into smaller components. 콘텐츠 보기의 중복을 줄일 수 있으며 뷰 요소를 다시 사용할 수 있습니다.They can reduce duplication of view content and allow view elements to be reused. 일반 레이아웃 요소에 지정 해야 _Layout.cshtml합니다.Common layout elements should be specified in _Layout.cshtml. 비 레이아웃 다시 사용할 수 있는 콘텐츠 부분 뷰 개체로 캡슐화 될 수 있습니다.Non-layout reusable content can be encapsulated into partial views.

논리 조각으로 구성 하는 복잡 한 페이지를 사용 하도록 설정한 경우에 자체 부분 뷰로 각 부분에 맞게 유용할 수 있습니다.If you have a complex page made up of several logical pieces, it can be helpful to work with each piece as its own partial view. 페이지의 나머지 부분과 분리에서 페이지의 각 부분을 볼 수 있습니다만 포함 되어 있으므로 전체 페이지 구조와를 부분 뷰를 렌더링 하기 페이지 자체에 대 한 보기 매핑되며 훨씬 더 간단 합니다.Each piece of the page can be viewed in isolation from the rest of the page, and the view for the page itself becomes much simpler since it only contains the overall page structure and calls to render the partial views.

팁: 따라는 하지 반복 직접 원칙 보기에 있습니다.Tip: Follow the Don't Repeat Yourself Principle in your views.

부분 뷰를 선언합니다.Declaring Partial Views

부분 뷰를 다른 뷰와 마찬가지로 만들어집니다: 만들면는 .cshtml 내에 파일이 폴더입니다.Partial views are created like any other view: you create a .cshtml file within the Views folder. 부분 뷰 및 일반 보기 간의 의미 체계 차이점이-다르게 렌더링만 합니다.There is no semantic difference between a partial view and a regular view - they are just rendered differently. 컨트롤러의 직접에서 반환 되는 뷰를 사용할 수 있습니다 ViewResult, 부분 뷰로 같은 보기를 사용할 수 있습니다.You can have a view that is returned directly from a controller's ViewResult, and the same view can be used as a partial view. 부분 뷰 실행 하지 않는 뷰와 부분 뷰 렌더링 되는 방식 간의 주요 차이점은 _viewstart.vbhtml (뷰 수행-자세한 정보에 대 한 동안 _viewstart.vbhtml레이아웃 ).The main difference between how a view and a partial view are rendered is that partial views do not run _ViewStart.cshtml (while views do - learn more about _ViewStart.cshtml in Layout).

부분 뷰를 참조합니다.Referencing a Partial View

페이지 보기 내에서 여러 가지가 부분 뷰를 렌더링할 수 있습니다.From within a view page, there are several ways in which you can render a partial view. 사용 하는 가장 간단한 것 Html.Partial를 반환 하는 IHtmlString 접두사로 사용 하 여 호출 하 여 참조 될 수 있습니다 및 @:The simplest is to use Html.Partial, which returns an IHtmlString and can be referenced by prefixing the call with @:

@Html.Partial("AuthorPartial")

PartialAsync 메서드는 부분 (보기에는 코드는 일반적으로 권장 되지 않습니다)는 없지만 비동기 코드가 포함 된 뷰를 사용할 수 있습니다.The PartialAsync method is available for partial views containing asynchronous code (although code in views is generally discouraged):

@await Html.PartialAsync("AuthorPartial")

부분 뷰를 렌더링할 수도 있고 RenderPartial합니다.You can render a partial view with RenderPartial. 이 메서드는 결과 반환 하지 않습니다. 렌더링된 된 출력을 응답에 직접를 스트리밍합니다.This method doesn't return a result; it streams the rendered output directly to the response. Razor 코드 블록 내에서 호출할 수 해야 결과 반환 하지 않습니다 (호출할 수도 있습니다 RenderPartialAsync 필요한 경우):Because it doesn't return a result, it must be called within a Razor code block (you can also call RenderPartialAsync if necessary):

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

결과 직접 스트리밍합니다 때문에 RenderPartialRenderPartialAsync 일부 시나리오에서 더 잘 수행 될 수 있습니다.Because it streams the result directly, RenderPartial and RenderPartialAsync may perform better in some scenarios. 그러나 사용 하는 것이 좋습니다 대부분의 경우 PartialPartialAsync합니다.However, in most cases it's recommended you use Partial and PartialAsync.

참고

보기를 코드를 실행 해야 할 경우 권장된 패턴을 사용 하는 뷰 구성 요소 부분 뷰를 대신 합니다.If your views need to execute code, the recommended pattern is to use a view component instead of a partial view.

부분 뷰 검색Partial View Discovery

부분 뷰를 참조 하는 경우 여러 가지 방법으로 해당 위치를 참조할 수 있습니다.When referencing a partial view, you can refer to its location in several ways:

// Uses a view in current folder with this name
// If none is found, searches the Shared folder
@Html.Partial("ViewName")

// A view with this name must be in the same folder
@Html.Partial("ViewName.cshtml")

// Locate the view based on the application root
// Paths that start with "/" or "~/" refer to the application root
@Html.Partial("~/Views/Folder/ViewName.cshtml")
@Html.Partial("/Views/Folder/ViewName.cshtml")

// Locate the view using relative paths
@Html.Partial("../Account/LoginPartial.cshtml")

서로 다른 뷰 폴더에 이름이 같은 다른 부분 뷰를 사용할 수 있습니다.You can have different partial views with the same name in different view folders. 확장명을 제외한 파일 이름으로 뷰를 참조할 때 각 폴더의 보기와 같은 폴더에 부분 뷰를 사용 합니다.When referencing the views by name (without file extension), views in each folder will use the partial view in the same folder with them. 또한에 넣어서 기본 부분 뷰를 사용 하려면 지정할 수 있습니다는 Shared 폴더입니다.You can also specify a default partial view to use, placing it in the Shared folder. 공유 부분 뷰의 부분 뷰의의 고유 버전을 갖지 않는 모든 보기에서 사용 됩니다.The shared partial view will be used by any views that don't have their own version of the partial view. 기본 부분 뷰를 사용할 수 있습니다 (에서 Shared)는 부모 보기와 같은 폴더에 같은 이름의 부분 뷰에 의해 재정의 됩니다.You can have a default partial view (in Shared), which is overridden by a partial view with the same name in the same folder as the parent view.

부분 뷰 수 연결합니다.Partial views can be chained. 즉, 부분 뷰 (으로 루프를 만들지 않으면) 다른 부분 뷰를 호출할 수 있습니다.That is, a partial view can call another partial view (as long as you don't create a loop). 각 뷰나 부분 뷰 내에서 상대 경로 항상 해당 보기, 하지 루트 또는 부모 보기를 기준으로 합니다.Within each view or partial view, relative paths are always relative to that view, not the root or parent view.

참고

선언 하는 경우는 Razor section 부분 뷰에서 않을 해당 부모에 게 표시; 부분 뷰로 제한 됩니다.If you declare a Razor section in a partial view, it will not be visible to its parent(s); it will be limited to the partial view.

부분 뷰에서 데이터에 액세스Accessing Data From Partial Views

부모 뷰의 복사본을 가져와서 부분 뷰가 인스턴스화되면 ViewData 사전입니다.When a partial view is instantiated, it gets a copy of the parent view's ViewData dictionary. 부분 뷰 내에서 데이터에 대 한 업데이트는 부모 뷰에 유지 되지 않습니다.Updates made to the data within the partial view are not persisted to the parent view. ViewData부분에서 변경 된 부분 뷰는 반환 될 때 보기 손실 됩니다.ViewData changed in a partial view is lost when the partial view returns.

인스턴스를 전달할 수 ViewDataDictionary 부분 뷰로:You can pass an instance of ViewDataDictionary to the partial view:

@Html.Partial("PartialName", customViewData)

부분 뷰를 모델을 전달할 수도 있습니다.You can also pass a model into a partial view. 이 페이지의 보기 모델 또는 일부 일부를 사용자 지정 개체 수 있습니다.This can be the page's view model, or some portion of it, or a custom object. 모델을 전달할 수 있습니다 Partial,PartialAsync, RenderPartial, 또는 RenderPartialAsync:You can pass a model to Partial,PartialAsync, RenderPartial, or RenderPartialAsync:

@Html.Partial("PartialName", viewModel)

인스턴스를 전달할 수 ViewDataDictionary 및 부분 뷰를 뷰 모델:You can pass an instance of ViewDataDictionary and a view model to a partial view:

@Html.Partial("ArticleSection", section,
            new ViewDataDictionary(this.ViewData) { { "index", index } })

다음 태그는 Views/Articles/Read.cshtml 두 부분 뷰를 포함 하는 뷰.The markup below shows the Views/Articles/Read.cshtml view which contains two partial views. 두 번째 부분 뷰는 모델에 전달 하 고 ViewData 부분 뷰를 합니다.The second partial view passes in a model and ViewData to the partial view. 새로운 전달할 수 ViewData 기존 유지 하면서 사전 ViewData 생성자 오버 로드를 사용 하는 경우는 ViewDataDictionary 아래의 강조 표시 된:You can pass new ViewData dictionary while retaining the existing ViewData if you use the constructor overload of the ViewDataDictionary highlighted below:

@using Microsoft.AspNetCore.Mvc.ViewFeatures
@using PartialViewsSample.ViewModels
@model Article

<h2>@Model.Title</h2>
@*Pass the authors name to Views\Shared\AuthorPartial.cshtml*@
@Html.Partial("AuthorPartial", Model.AuthorName)
@Model.PublicationDate

@*Loop over the Sections and pass in a section and additional ViewData
    to the strongly typed Views\Articles\ArticleSection.cshtml partial view.*@
@{ var index = 0;
    @foreach (var section in Model.Sections)
    {
        @Html.Partial("ArticleSection", section,
                    new ViewDataDictionary(this.ViewData) { { "index", index } })
        index++;
    }
}

뷰/공유/AuthorPartial:Views/Shared/AuthorPartial:

@model string
<div>
    <h3>@Model</h3>
    This partial view came from /Views/Shared/AuthorPartial.cshtml.<br />
</div>

ArticleSection 부분:The ArticleSection partial:

@using PartialViewsSample.ViewModels
@model ArticleSection

<h3>@Model.Title  Index: @ViewData["index"]  </h3>
<div>
    @Model.Content
</div>

런타임에 부분 렌더링 되는 부모 보기로 렌더링 되는 자체 공유 내 _Layout.cshtmlAt runtime, the partials are rendered into the parent view, which itself is rendered within the shared _Layout.cshtml

부분 뷰 출력