본문 바로가기
ASP.NET MVC

ASP.NET MVC] RenderPartial, Partial, RenderAction, Action

by Fastlane 2022. 7. 15.
728x90
반응형

Partials

기본설정으로 _ViewStart가 적용되지 않아, layout을 사용하지 않는다. 필요시, 지정할 수 있다. 

action method를 호출하지 않는다. 

Partial view에 보낼 수 있는 model을 가지고 있을 때 사용한다. 

method : RenderPartial, Partial

 

두 method의 결과는 동일하다. 다른점은, RenderPartial은 void, Partial은 MvcHtmlString을 반환한다. 

전자가 더 빠르지만, 큰 차이 없다. 

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

 

BannerList.cshtml

@model IEnumerable<Dto.Banner>

    <!-- 목록테이블:S -->
    <div class="admFormListWrap MT20">
        @foreach (var item in Model)
        {
            <!-- foreach:S -->
            @Html.Partial("BannerListItem", item)
            <!-- foreach:E -->
        }
    </div>
    <!-- 목록테이블:E -->

BannerListItem.cshtml

@model Dto.Banner

@{
    Layout = null;
}

<div class="admFormList">
    <div class="admFormInner">
        <div class="txArea">
            <div class="recNm">@Model.Title</div>
            <ul class="txaLst">
                <li class="tp">
                    <span class="dt">노출순서</span> : @Model.OrderNum
                </li>
                <li class="tp">
                    <span class="dt">등록일</span> : @Model.RegDate.ToShortDateString()
                </li>
            </ul>
        </div>
    </div>
</div>

Child actions

action method를 호출한다. 

Child action view로 보낼 model을 갖고 있지 않다. parent view와 상관없는 데이터를 표시한다. 

database or session과 같은 persistent store에서 model을 가져온다. 

method : RenderAction, Action

        [ChildActionOnly]
        public PartialViewResult LogOnWidget()
        {
            bool isAuthenticated = Request.IsAuthenticated;
            Profile profile = null;
            if (isAuthenticated)
            {
                var username = HttpContext.User.Identity.Name;
                profile = _profileRepository.Find(username);
                if (profile == null)
                {
                    profile = new Profile(username);
                    _profileRepository.Add(profile);
                }
            }
            var model = new LogOnWidgetModel(isAuthenticated, profile);
            return PartialView(model);
        }
<div id="logindisplay">
   @Html.Action("LogOnWidget", "Account")
</div>
728x90
반응형

댓글