programing

ASP에서 보기의 레이아웃(Master Page)을 변경합니다.재생성하지 않고 NET MVC

css3 2023. 9. 27. 18:04

ASP에서 보기의 레이아웃(Master Page)을 변경합니다.재생성하지 않고 NET MVC

ASP를 쓰고 있습니다.레이저 뷰가 있는 NET MVC 3.뷰를 작성할 때 뷰에 대한 레이아웃(마스터 페이지)을 선택하거나 Default(_Layout)를 선택하도록 둘 수 있습니다.

이 레이아웃을 재생성하지 않고 뷰를 만든 후 변경하려고 하는데 뷰에 대한 레이아웃 정보를 저장할 수 있는 곳이 있습니까?어떻게 변경할 수 있습니까?

MVC3에서는_ViewStart.cshtml모든 페이지의 레이아웃을 저장합니다. 이 요소를 변경하여 모든 페이지의 레이아웃을 변경하거나 의 대상 보기 페이지 상단에 새 레이아웃 요소를 추가할 수 있습니다.@{}특정 페이지의 레이아웃을 변경하려면 다음과 같은 블록을 사용합니다.

@{
    Layout = "~/Views/Shared/_newLayout.cshtml";
    ViewBag.Title = "Index";
}

필요에 따라 뷰에 대해 다른 레이아웃을 지정하는 방법은 여러 가지가 있습니다.

보기에서

다른 답변에서 언급한 것처럼 보기의 내용을 변경하기만 하면 됩니다.Layout속성:

@{
    Layout = "~/Views/Shared/_CustomLayout.cshtml";
}

_ViewStart.cshtml에서

MVC 3이 기본값을 추가했습니다. Views/_ViewStart.cshtml모든 보기에 공유되는 논리를 넣을 수 있습니다.추가로 생성할 수도 있습니다._ViewStart.cshtml추가 사용자 지정 로직을 위해 보기 하위 디렉토리에 있는 파일(계층을 검색하고 를 검색합니다.Shared다른 보기 또는 부분을 찾을 때와 마찬가지로 폴더를 선택합니다.

여기에 비즈니스 논리를 많이 넣는 것은 '관심사 분리' 원칙을 위반하는 것처럼 느껴지지만, 동시에 매우 편리할 수 있습니다.

참고:_ViewStart.cshtmlWebPage가 아닌 StartPage에서 상속하므로 속성이 사용자에게 익숙한 것과 약간 다를 수 있습니다(예: 사용자가 거쳐야 함).ViewContext을 얻다ViewBag).

@{
    if (ViewContext.ViewBag.IsAdmin) // or other custom logic
    {
        Layout = "~/Views/Shared/_AdminLayout.cshtml";
    }
    else
    {
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
}

컨트롤러 작업에서

View()메서드는 명시적 레이아웃 페이지를 사용하는 오버로드가 있습니다(Intelisense는 이 페이지를 "마스터 페이지"라고 부릅니다).

    public ActionResult FooAction()
    {
        var model = new MyModel();

        return View("Index", "_CustomLayout", model);
    }

cshtml 파일 상단에 보기를 작성한 후 레이아웃이 포함된 것을 볼 수 있습니다.

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

예를 들어 다른 레이아웃으로 간단히 교체할 수 있습니다.

@{
    Layout = "~/Views/Shared/_Layout2.cshtml";
}

또한 이를 기본 레이아웃에 저장할 수 있습니다 (_ViewStart.cshtml모든 보기에서 해당 레이아웃을 사용합니다.

아래 코드를 사용하여 _ViewStart 파일 내에서 레이아웃의 기본 렌더링을 변경할 수 있습니다.

@{
 var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();

 string layout = "";
 if (controller == "Admin")
 {
 layout = "~/Views/Shared/_AdminLayout.cshtml";
 }
 else
 {
 layout = "~/Views/Shared/_Layout.cshtml";
 }

 Layout = layout;
}

언급URL : https://stackoverflow.com/questions/8516116/change-layoutmaster-page-of-view-in-asp-net-mvc-without-recreate-it