내 응용 프로그램에 2 개의 개별 레이아웃을 갖고 싶습니다. 하나는 웹 사이트의 공개 섹션을위한 것이고 다른 하나는 회원 측을위한 것이라고합시다.
간단하게하기 위해 각 사이트에 대한 모든 로직이 2 개의 개별 컨트롤러에 깔끔하게 래핑되어 있다고 말할 수 있습니다.
- PublicController
- StaffController
그리고 그들 각각은 각각 아래에있는 모든보기에 해당하는 레이아웃을 가지고 있습니다.
- _PublicLayout.cshtml
- _StaffLayout.cshtml
_ViewStart.cshtml 파일을 사용하여 “Public”아래의 모든 View / Action이 PublicLayout을 사용하고 “Staff”아래의 모든 것이 StaffLayout을 사용하도록 지정하려면 어떻게해야합니까?
감사!
답변
폴더 _ViewStart.cshtml
안에 파일을 넣고 /Views/Public
폴더의 기본 파일 을 무시 /Views
하고 원하는 레이아웃을 지정할 수 있습니다.
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
유추 하여 다음과 _ViewStart.cshtml
같이 /Views/Staff
폴더 안에 다른 파일을 넣을 수 있습니다.
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
컨트롤러 작업 내에서 뷰를 반환 할 때 사용해야하는 레이아웃을 지정할 수도 있지만 이는 작업 별입니다.
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
또 다른 가능성은 레이아웃을 재정의하는 사용자 지정 동작 필터입니다. 당신이 이것을 달성 할 수있는 많은 가능성을 볼 수 있듯이. 시나리오에 가장 적합한 것을 선택하십시오.
최신 정보:
의견 섹션에서 요청한대로 마스터 페이지를 선택하는 작업 필터의 예는 다음과 같습니다.
public class LayoutInjecterAttribute : ActionFilterAttribute
{
private readonly string _masterName;
public LayoutInjecterAttribute(string masterName)
{
_masterName = masterName;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var result = filterContext.Result as ViewResult;
if (result != null)
{
result.MasterName = _masterName;
}
}
}
그런 다음 원하는 레이아웃을 지정 하여이 사용자 정의 속성으로 컨트롤러 또는 작업을 장식하십시오.
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
답변
또 다른 방법은 뷰 내에서 레이아웃을 정의하는 것입니다.
@{
Layout = "~/Views/Shared/_MyAdminLayout.cshtml";
}
더 많은 방법, 여기 에서 찾을 수 있습니다 , 이것이 누군가를 돕기를 바랍니다.
답변
이 방법은 초보자가 ASP.NET MVC 응용 프로그램에서 레이아웃 렌더링을 제어 할 수있는 가장 간단한 방법입니다. 컨트롤러를 식별하고 레이아웃을 par 컨트롤러로 렌더링 할 수 있습니다.이를 위해 Views 폴더의 루트 디렉토리에있는 _ViewStart 파일에 코드를 작성할 수 있습니다. 다음은 수행 방법을 보여주는 예입니다.
@{
var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
string cLayout = "";
if (controller == "Webmaster")
cLayout = "~/Views/Shared/_WebmasterLayout.cshtml";
else
cLayout = "~/Views/Shared/_Layout.cshtml";
Layout = cLayout;
}
전체 기사 읽기 여기에 “어떻게 ASP.NET MVC에서 다른 레이아웃을 렌더링하기 위해”