c# 패턴 Asp.Net MVC-어떻게 공유보기에서 "컨트롤러"를 가지고




visual studio community 2017 asp net mvc 5 (4)

WDuffy 제공 한 RenderAction 접근법이 잘 작동하는 동안, 나는 최근에 IoC를 사용하는 다른 접근법을 사용하여이 주제에 관해 블로그를 작성했습니다.

http://crazorsharp.blogspot.com/2011/03/master-page-model-in-aspnet-mvc-3-using.html

_Header.cshtml이라는 내 머리글에 대한 _Layout.cshtml의 공유보기가 있습니다.

데이터베이스에서 텍스트와 이미지를 표시하고 싶습니다. 따라서 컨트롤러를 데이터베이스에두고 _Header.cshtml로 반환해야합니다.

컨트롤러 호출은 항상 사용자가 이동하는 페이지마다 다르기 때문에 어떻게 할 수 있습니까? 공유보기가있는 컨트롤러가있는 방법이 있습니까?

여기에 _Layout.cshtml이 있습니다.

    <div id="header">
        <div id="title">
            @Html.Partial("_Header")
        </div>

        <div id="logindisplay">
           @Html.Partial("_CultureChooser")
            <br />
           @Html.Partial("_LogOnPartial")
        </div>

        <div id="menucontainer">
           @Html.Partial( "_MenuPartial")
        </div>
    </div>

    <div id="main">
        @RenderBody()
        <div id="footer">
        </div>
    </div>

</div>


당신이 묻는 질문이 좋기를 바랍니다. 우리는 공유 레이아웃보기를위한 컨트롤러를 가질 수 있습니까?

간단한 대답은 아니오입니다.

이 목표를 달성하려면 같은 목적으로 부분 뷰를 만들어 공유 레이아웃에 배치해야합니다. 그렇게함으로써 목표를 달성 할 수 있습니다.


contoller 액션에서 뷰의 이름을 지정할 수 있습니다.

public class MenuController : Controller
{
    [ChildActionOnly]
    public ActionResult Header()
    {
        var model = ... // go to the database and fetch a model
        return View("~/Views/Shared/_Header.cshtml", model);
    }
}

이제 @Html.Partial("_Header") 대신 _Layout.cshtml 에서 다음을 수행하십시오.

@Html.Action("Header", "Menu")

... 1 년 후 디미트로프 (Dimitrov) 응답에 한 가지만 추가하고 싶습니다. 컨트롤러를 조금 더 깨끗하게 만들 수 있습니다.

public class MenuController : Controller
{
    [ChildActionOnly]
    public ActionResult Header()
    {
        var model = ... // go to the database and fetch a model
        return Partial("_Header", model);
    }
}




asp.net-mvc-3