ASP.NET2.0のテーマを今更試してみようとしたら軽く一はまり。
Web ページの表示デザイン(テーマ)を動的に変更する方法
http://thesource.ofallevil.com/japan/msdn/asp.net/tips/Theme2/default.aspx
ASP.NET 2.0 での Web アプリケーション テーマの作成
http://www.microsoft.com/japan/msdn/vs05/aspnet/themes.asp
この辺の情報が参考になるのですが、マスターページを使っている場合はこのままではダメで、
Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit ‘Request コレクションを使用しているのは、 PreInit イベントがページ実行ライフサイクルにおいて初期に発生するので、dropTheme DropDownList コントロールのプロパティを使用できないためです。 Page.Theme = Request(“ctl00$ContentPlaceHolder1$ListBoxTheme”) End Sub |
みたいになります。
手っ取り早いのはHTMLのソースでnameを確認することですね。
で、次に問題は、どうやってそれを全ページに適用するか。
theme プロパティは、Page PreInit イベントの前、またはその中でのみ設定可能なのですが、なんと、マスターページにはPage_PreInitがないのですね。
中の技術日誌ブログさんでもちょっと前に書かれていましたが、結局
Page ← CustomBasePage ← 個別ページ
の構造にするしかないのかなという感じです。
で、CustomBasePageで
Private Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit If Not Request.Cookies(“USERINFO”) Is Nothing Then Dim Cookie As HttpCookie Cookie = Request.Cookies(“USERINFO”) Page.Theme = Cookie(“Page_Theme”) End If End Sub |
みたいなかんじでしょうか。
トラックバック URL
http://jqinglong.wp.xdomain.jp/2006/05/03/asp-net2-0-%e3%83%86%e3%83%bc%e3%83%9e%e3%81%ae%e5%8b%95%e7%9a%84%e5%a4%89%e6%9b%b4/trackback/