Back to top

Blazor에서 mainlayout의 요소를 다루기

작성날짜 2024/10/17

Body의 콘텐츠에 따라 aside의 내용을 바꾸고 싶다.


다른 블로그 같은 곳에 보면 aside 영역이 있고 이 곳에 콘텐츠가 없을 때도 있고 있을 떄는 body 콘텐츠에 따라 내용이 변하기도 한다.

article_img_1_rte_image_1.png

사진의 빨간 상자 영역 같은게 내 블로그에도 있었으면 좋겠다.


MainLayout.razor

<FluentStack Class="main" Orientation="Orientation.Horizontal" Width="100%">
    <NavMenu />
    <FluentBodyContent Class="body-content">
        <div class="content">
            @Body
        </div>
        <div class="aside">

        </div>
    </FluentBodyContent>
</FluentStack>

그래서 일단 레이아웃에 aside를 끼워 넣었는데... 이걸 자식 컴포넌트에서 어떻게 조작하지?


Blazor sections


자식 컴포넌트에서 Mainlayout의 조작을 지원하기 위해 Blazor에서는 Blaozor Section이라는 걸 제공한다.


우선 프로젝트의 Components 폴더 하위의 _Imports.razor파일을 열고 다음 참조를 추가해주자.

@using Microsoft.AspNetCore.Components.Sections


그리고 Mainlayout.razor에 원하는 곳에 SectionOutlet 태그를 추가한다.

<FluentStack Class="main" Orientation="Orientation.Horizontal" Width="100%">
    <NavMenu />
    <FluentBodyContent Class="body-content">
        <div class="content">
            @Body
        </div>
        <div class="aside">
            <SectionOutlet SectionName="aside-content" />
        </div>
    </FluentBodyContent>
</FluentStack>

aside 영역 아래에 aside-content라는 이름의 섹션을 만들었다.


그리고 aside-content에 내용이 있기를 원하는 컴포넌트에서 SectionContent 태그를 추가하면(물론 aside-content라는 이름을 알려줘야 한다) 해당 컴포넌트를 호출 할 때 aside-content에 내용을 추가할 수 있다.

<SectionContent SectionName="aside-content">
    <FluentAccordion>
        <FluentAccordionItem Expanded="true" Heading="@글제목">
        </FluentAccordionItem>
    </FluentAccordion>
</SectionContent>


이렇게 해주면


rte_image_191.png

aside는 Mainlayout에 있지만 그 하위 컴포넌트에서 aside에 글제목을 넘겨 줄 수 있다.


참고: https://learn.microsoft.com/en-us/aspnet/core/blazor/components/sections?view=aspnetcore-8.0


An unhandled error has occurred. Reload 🗙