2017-12-21 2 views
0

ASP.NET Core 2.0 응용 프로그램이 있는데 뷰가 뷰 외부에서 사용해야하는 레이아웃 페이지를 설정하려고합니다. 그런 식으로 모든 의견에 대해 동일한 코드를 계속 반복하지 않아도됩니다.ASP.NET 코어 - 레이아웃 외부 페이지보기

나는 생성자 내에서 그것을 설정하는 다음과 같은 기본 클래스에서 내 모든보기를 상속하여이 작업을 수행 할 수 있습니다 : 이것은 그러나 현재의 URL을 기반으로 테마 변경의 이름을 잘 작동

public class RazorPage<TModel> : Microsoft.AspNetCore.Mvc.Razor.RazorPage<TModel> { 
    public RazorPage() { 
     var theme = "Theme1;" 
     Layout = $"~/Areas/{theme}/Views/Shared/_Layout" + RazorViewEngine.ViewExtension; 
    } 
} 

. 현재 컨텍스트에 액세스하여이 작업을 수행 할 수 있다고 생각했지만 생성자 내에서 Context 속성을 호출하면 null이 반환됩니다.

Layout 속성을 설정할 수있는 위치를 재정의하고 현재 요청 컨텍스트에 액세스 할 수있는 적절한 방법이 표시되지 않습니다.

누군가 다른 방법을 알고 있습니까?

_ViewImports/_ViewStart 파일을 사용하여이 작업을 수행 할 수 있다는 것을 알고 있지만 내 응용 프로그램의 구조로 인해 파일이 중복되어 있어야하고 내보기에서 비즈니스 로직을 갖고 싶지 않습니다.

+1

아마도 IViewLocationExpander로 시작하십시오. https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.razor.iviewlocationexpander?view=aspnetcore-2.0 –

답변

0

(@ valery.sntx에서 제안한대로) IViewLocationExpander를 사용하여 현재 테마에 따라 공유 뷰를 찾을 위치를 지정합니다. 현재 공유 뷰는 현재 URL을 기반으로 변경됩니다.

나는 다음 자동차는 IFileProvider를 사용하여 _ViewStart 파일을 생성하고 단순히 콘텐츠의 설정 :

@{ 
    Layout = "_Layout"; 
} 

두 번째 부분이 여러 _ViewStart 파일을 만들 필요에서 저를 저장 선택 사항이지만 방식 때문에 내 응용 프로그램에 디자인되었습니다.