2009-09-29 5 views
0

하드 코드 된 테마 값이있는 마스터 페이지에 드롭 다운 상자를 놓고 lstThemeChooser라고했습니다.마스터 페이지에 테마 선택기를 삽입하려면 어떻게합니까?

페이지 테마를 설정하고 싶습니다. 나는 각 페이지에 이것을 넣어야한다고 읽었습니다 :

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    Page.Theme = Request["lstThemeChooser"]; 
} 

그러나 요청은 null이므로 테마가 설정되지 않습니다.

드롭 다운 상자는 autopostback = True로 설정됩니다.

내가 뭘 잘못하고 있는지, 아니면 어떻게 든 완전히 불가능한 아이디어가 있습니까?

(asp.net)

답변

1

마스터 페이지에서 할 수 없습니다. 당신은 모든 페이지에서 그렇게해야합니다.

namespace MyNamespace.Mycontrols 
{ 
    public class Page : System.Web.UI.Page 
    { 
     public Page() 
     { 
      this.PreInit += new EventHandler(Page_PreInit); 
     } 

     void Page_PreInit(object sender, EventArgs e) 
     { 
      // Apply Theme 
      this.Theme = Request["lstThemeChooser"]; 
     } 
    } 
} 

편집 : 나는 페이지 개체 클래스라는 서브를 제안

public partial class MyPage: MyNamespace.Mycontrols.Page 
{ 
    ... 
} 
+0

내가 드롭 다운 상자 그래도 내 페이지의 맨 오른쪽에있는 헤더에 표시 할 클래스를 사용을하고, 헤더는 마스터 페이지에 의해 제어됩니다. 나는 당신의 대답을 이해하지 못한다. 페이지 객체를 서브 클래스로 분류하는 것에 대한 의미를 설명 할 수 있겠는가? 죄송합니다 .. – NibblyPig

+0

Masterpage에서 제어 논리를 제어 할 수 있습니다. 하지만 : 각 페이지에서만 테마를 변경할 수 있습니다. 이는 Masterpage가 아닌 Page 만 PreInit 및 InitializeCulture 이벤트를 가지고 있기 때문입니다. 서브 클래 싱이란 예로서 제공되는 클래스 I를 생성한다는 것을 의미합니다. 그런 다음 각 페이지에서 기본 클래스를 변경해야합니다. 나는 내 대답을 편집했다. – Arthur

+0

고맙습니다. 이상한 점은 마스터 페이지에서 컨트롤을 사용할 수 있지만 마스터 페이지를 사용하는 페이지의 page_preinit 이벤트가 발생하기 전에는 요청이 단순히 null을 반환한다는 것입니다. 누락 된 내용이 있습니까? – NibblyPig

관련 문제