- PR -

マスタページ使用時のPage_Loadイベントについて

1
投稿者投稿内容
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2007-09-07 01:01
【環境】
C# 2005 / ASP.NET

【やりたいこと】
マスターページのPage_Loadで取得した情報をコンテンツページのPage_Loadでも使用したい。

【やったこと・わかっていること】
次のようなプログラムを作成しています。
・マスターページのPage_LoadイベントでPage.User.Identity.Nameで取得した
 情報をもとにADOでデータベースにアクセスしパーミッションを取得している。
・マスターページもコンテンツページもデータベースから取得した
 パーミッションによって表示内容を変更している。
・現在は情報を引き継ぐことができずコンテンツページのPage_Loadでも
 パーミッションの取得を行い、プログラムの動作自体は正常に行えている。
・マスタページで取得した情報をコンテンツページで使用するには
 @ MasterTypeディレクティブを使用するのは理解している。

【質問】
私の環境ですと先にコンテンツページのPage_Loadが発生します。私としては
先にマスターページのPage_Loadが発生してほしいのですが、それを指定できますでしょうか。
また、仮にこの順番は変えられないとします。動かすだけならPage_LoadCompleteイベントなど
Page_Loadの後続で発生するイベントに記述すれば動作しますが、どのイベントが適切なのでしょうか。

よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-09-08 20:54
 そもそも、Page.Load イベントで処理しようとするのが間違いです。もっと前に準備すれば、マスターとコンテンツのどちらでも利用できますよね?


 実際の本を買って読んでいただかないと、この連載では省かれていてわかりにくいところがあると思いますが、参考→Webアプリのセキュリティデザイン基礎
それと、この辺(第18回 Windows認証を実装したWebアプリケーション)も参照。Windows 認証となっていますが、17回から3回にわたって認証と認定を説明しています。一通り目を通してみましょう。

 認証関係のページへのリンクをまとめているので紹介→ASP.NET 2.0 ユーザの認証
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2007-09-13 16:48
Jittaさんご回答ありがとうございます。

本を買ってきまして、いろいろ私なりに検証してみました。

本にはロールはApplication_AuthenticateRequestで実装して
Principalオブジェクトで管理とありますが、今回の仕組みでは
Windows統合認証を使用していて、自動で取得されたロール情報
(セキュリティグループ)についても一緒に使用したいため、
Application_AcquireRequestStateでSessionオブジェクト内に
独自のロール情報(データベースから取得)を作成しようと考えています。

これが定石かというのは?ですが、一応、やりたいことはできています。
ただ、そこで疑問に思ったことが2点あり再度下記に質問をまとめます。

1.global.asaxを作成するとデフォルトでApplication_OnStartやOnEndが
 できると思います。これはもしかしてレガシーのASP互換のハンドラ
 なのでしょうか。Session_OnStart、OnEndもただ下位互換のためなのか
 という印象があります。この認識は正しいでしょうか。
 # 最初はApplication_AcquireRequestStateでなく、
 # Session_OnStartを使用しようと思っていました。
 また、この認識が誤りだとすると、ASP.NETパイプライン処理上、どこに
 これらのハンドラが収まるのでしょうか。

2.各ハンドラの使いどころのTipsのようなページなどありますでしょうか。
 ヘルプなどを見てもそのものズバリの発生場所しか書いてないような感じがします。
 たとえば、Application_AuthenticateRequestではロール情報の設定を行うといいかも
 というようなアドバイザリーです。参考になるような書籍でもかまいません。

よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-09-13 22:14
先に、ちと脱線。Session.OnEnd?インプロセスですか?インプロセスで、本当に良いですか?

元に戻って。
1の方は、よくわかりません。
2の方は、自分のしたいことと照らし合わせて、どこが適切かを選べばよいのではないでしょうか。
pattern & practics、enterprise liblary に、何かあるかもしれません。
ゆいたん
ベテラン
会議室デビュー日: 2004/08/26
投稿数: 91
投稿日時: 2007-09-14 10:30
> インプロセスですか?インプロセスで、本当に良いですか?
http://www.itmedia.co.jp/enterprise/articles/0412/28/news015.html
上記を読み進む限り、インプロセスでよいと考えています。
あと、Session.OnEndを使うつもりはないです。1.の質問は
Application.OnStart、Application.OnEnd、Session.OnStart、
Session.OnEndが.NETじゃないASPのときにこれらを使ってた人のために
残っているだけなので積極的に使わないほうがよいとかいう
ルールがあるかなと思ったので。わかりにくくてすみません。

2.はたくさん経験や検証するしかないという話なのでしょうね。
あとは、たまたま眺めてたアーティクルに載ってたとか。

ありがとうございました。
1

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