문제

나는 사이트에서 작업하는 요구를 지원할 수 있는 두 개 이상의 외모,변하기 쉬워 수 있습니다.내가하기를 희망을 처리할 수 있으로 변경 CSS 스위치 처럼 보이지만 나를 사용해야 하는 다른 masterpage 에 대한 각각의 디자인이다.

그래서 최선의 방법은 무엇일을 설정하 masterpage 런타임에?페이지입니다.MasterPageFile 에서만 설정할 수 있습니다.OnPreInit 이벤트입니다.그것처럼 보인 솔루션을 만들 수 있는 모든 내 페이지에서 상속되는 일반적인 기본 처리하는 PreInit 이벤트가 진행되는,또는 사용하는 HttpModule 있는 않습니다.

특별한 조언이 있나요?

도움이 되었습니까?

해결책

해봤으면 하기 전에,나는 정확하게 당신이 설명(만든 모든 페이지에서 상속자 지정 페이지로 OnPreInit 이벤트).도했던 사용자 지정 Application_PreRequestHandlerExecute 내 글로벌입니다.맨.cs 에 대한 설정 페이지입니다.StyleSheetTheme 을 하기를 위한 이미지/css 변화를 요구하지 않는 다른 Master 페이지입니다.

다른 팁

이 아닌 두 개의 서로 다른 마스터 페이지 방법에 대해 하나의 마스터하는 동적으로 짐을 다른 사용자 정의 컨트롤과 콘텐츠 HTML 리터럴?

나는 당신의 고통을 느낍니다.나는 검색을 위한 시간에 대해(지 않은 경우 등)문제에 대한 이습니다.그것은 그들의 절단 및 드라이 대답하는 말이"그냥에서 호출 PreInit 각 페이지에서"당신이 페이지의 수백.그러나 나는 것을 깨달았다 더 많은 시간을 보내 솔루션을 찾고 그것보다는 것을 그냥 그것은 각 페이지에.

그러나 나는 설정하고 싶었 MasterPageFile 프로파일에 따라 객실,이렇게 된 것에 대해 5 줄의 코드를 각 페이지 유지 관리 악몽이다.와 어쨌든,"반복하지 않는 자신을",right?

그래서 내가 만들어 확장 기법에서 모듈에서 App_Code 폴더를 만들이 더 쉽고 유지할 수 있습니다.

Public Module WebFunctions

    <System.Runtime.CompilerServices.Extension()> _
    Public Sub SetMaster(ByVal page As Page)

        Dim pb As ProfileCommon = DirectCast(HttpContext.Current.Profile, ProfileCommon)

        If pb IsNot Nothing Then
            page.MasterPageFile = pb.MasterPage
        End If

    End Sub

End Module

다음 각 페이지의 PreInit,나는 단지 이 전화:

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
        Me.SetMaster()
    End Sub

그것은 쉽게 충분을 처리하 PreInit 삽입 한 코드의 라인을 로드하는 데 걸리는 적절한 마스 페이지입니다.

this.Page.MasterPageFile = "~/default.master";

의 부재에서 몇 가지 뛰어난하지 않을 이유로 이동이 경로를,무엇을,어디에서 처리 PreInit.

저는 호기심을 결정하는 요인은 무엇인 페이지가 표시되는 방식 보?그것은 사용자가 버튼을 클릭하여 변경합니다.그것은 URL 을 기반으로 사용되었던 사이트를 얻으려면?

코드는 뒤에서 지원되는 마스터 페이지할 수 있도록부에서 논리의 한 마스터 페이지가 무엇을 결정하는 표시되어야 합니다.

본 여러 사이트에서 쿠키를 설정에 따라 사용자 클릭(을 변경하는 글꼴 크기,또는 페이지 폭),그리고 그런 다음 다른 CSS 파일에 적용된 값에 따라 그들의 쿠키가 있습니다.지 않은 경우 쿠키가 있으면,디스플레이 기본 보고 느낄 수 있습니다.

편집:

다른 생각이 여기는 경우에,당신은 단순히려 전환 CSS 설정하는 것이 당신의 스타일의 태그를 실행하는 서버에서 할당 속성을 지원합니다.다시 한 번이의 사용을 필요로하는 하나의 주 페이지 및 퍼팅 코드 코드의 마스 페이지에서 아마 PreInit 이벤트가 진행되는 처리기입니다.

이후 나는 결코 구현되는 이 솔루션은 내가 확실하지 않는 경우 전체 <HEAD> 태그에서 실행해 서버나지 않습니다.


<html>
<head id="Head" runat="server">
<style id="StylePlaceholder" runat="server" type="text/css"></style>
</head>

을 상속하신 모든 페이지를 기본 클래스에서처럼

public class PageBase : System.Web.UI.Page
{
    public PageBase()
    {
        this.PreInit += new EventHandler(PageBase_PreInit);
    }
    void PageBase_PreInit(object sender, EventArgs e)
    {
        this.MasterPageFile = "~/MyMasterPage.Master";
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top