- PR -

複数のMasterPagefileでの処理

1
投稿者投稿内容
Beginner
会議室デビュー日: 2008/08/05
投稿数: 3
投稿日時: 2008-08-05 13:54
ASP.NET初心者で、検索の方法が悪くてなかなか目的の内容に辿りつかないので
こちらに投稿させて頂きました。

現在、ログインIDの権限毎に異なるメニュー画面(MasterPage)を用いております。
該当の権限でしか使用しない画面ももちろんあるのですが、全ての権限で共通の画面も多くあります。それら共通の画面(ASPX)のMasterPageFileを動的に変更することは可能でしょうか?

文章だと、よく意味がわからないと思いますので下に例を記載致します。

【現状】
・権限A:使用するMasterPage
MasterPageFile="~/hogeA/MasterPagehogeA.master"
・権限B:使用するMasterPage
MasterPageFile="~/hogeB/MasterPagehogeB.master"
・共通化したいAspxファイル&VBファイル
hogeC.aspx、hogeC.aspx.vb
・hogeCの記述(必要な箇所のみ記述)⇒権限Aに設定
<%@ Page Language="VB" MasterPageFile="~/hogeA/MasterPagehogeA.master"
CodeFile="hogeC.aspx.vb" Inherits="A_hogeC" title="hogeC" %>

現在は記述がわからないので、hogeCのコピーを作成し(hogeC+)、ASPXの冒頭部
 を変更している。
<%@ Page Language="VB" MasterPageFile="~/hogeB/MasterPagehogeA.master"
CodeFile="hogeC+.aspx.vb" Inherits="B_hogeC+" title="hogeC+" %>
 ⇒権限Bに設定

全く同じAPSX,VBファイルなので、権限毎に画面を作るのは非常に無駄で、バグの元に
なってしまいます。恐らく相当初歩的な質問かと思いますが、ご教授頂けないで
しょうか?





どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-08-06 10:35
MasterPageの置き換えはPage_Initに記述することで実装できたと思います。
ただそれよりも、権限の管理をASP.NETに組み込まれているメンバーシップ/ロールを利用していて、メニューコントロールやツリービューコントロールでメニューを表示しているのであれば、セキュリティトリミングを利用すればMasterPageの置き換えなんて必要なくなります。
http://www.atmarkit.co.jp/fdotnet/dotnettips/513aspsectriming/aspsectriming.html
Beginner
会議室デビュー日: 2008/08/05
投稿数: 3
投稿日時: 2008-08-06 13:51
どっとねっとふぁんぬし様

どうもありがとうございます!

これから、色々と調べて結果の方を改めて報告させて頂きます。

本当に助かりました。
unimaru
会議室デビュー日: 2008/08/06
投稿数: 2
投稿日時: 2008-08-06 21:01
マスターページの切り替えはPage_PreInitのようです。
 this.MasterPageFile = "~/hogeA/MasterPagehogeA.master";
のようにすればそのマスターページになります。

同様にテーマに関してもPage_PreInitで切り替えられます。
 this.Theme = "テーマ名";

注意が必要なのはスタイルシートテーマでこちらはプロパティをオーバーライドです。
 public override string StyleSheetTheme {
  get { return "切り替えたいテーマ名"; }
 }

この辺のプロパティがどんな感じで呼び出されるかについてはプロパティをどんどんオーバーライドしてブレークポイントを張りまくれば動きが見えてきます。それと、Page_InitかPage_PreInitかについては違っていればエラーになるので分かります。

そうそう、マスターページの階層ですがVS2005はサポートしていません。ASP.NET 2.0本体は階層をサポートしてるので実行時はOKですが開発していくのは面倒です。VS2008は確かサポートしたような気がするのですが環境が今ないので未確認です。
Beginner
会議室デビュー日: 2008/08/05
投稿数: 3
投稿日時: 2008-08-20 12:02
unimaru様。
返答が遅くなりまして、大変申し訳ありませんでした。
具体的な回答大変ありがとうございます。
VS2005では階層をサポートしていないんですね。
不勉強でした。色々参考にしながら調べていきたいと思います。
まだ結果の方がでていないのですが、結果がはっきりしましたら連絡させて頂きます。


1

スキルアップ/キャリアアップ(JOB@IT)