1

私は複数のページを持つサイトを持っていますが、必ずしも階層的ではありません。ユーザーが最初にサイトにアクセスするたびに (AD を使用して) ユーザーの ID を照会し、必要に応じて他のページの便宜のためにセッション状態変数を作成したいと考えています。ユーザーは default.aspx ページを経由せずにサイトに入る可能性があるため、マスター ページのコード ビハインドにコードを配置することにしました。

これは良い考えであり、この情報を保持するある種の静的クラスに対して、セットアップを開始しましたが、マスター ページのコード ビハインドは、サイトにアクセスしたときに常に起動されるとは限らないことがわかりました。これはデバッグ現象ですか、それとも私が正しいのですか?マスター ページはこのコードを配置する場所として間違っていますか?

4

1 に答える 1

0

Global.asax クラスを使用することをお勧めします。まだ存在しない場合は、Web アプリに追加する必要があります。取得したら、さまざまなイベント (セッションの開始と終了、アプリの開始と終了、エラー) を使用して、まさに必要なものに固有のビジネス ロジックを実装できます。

私は、global.asax の Application_PreRequestHandlerExecute イベントで、ログインしているユーザーを操作する傾向があります。これにより、User Principle (例: User.Identity.Name) を見て、誰がログインしているか (またはログインしていないか) を確認し、必要なこと (ユーザーのセッション情報を設定するなど) を行うことができます。など)。

これは、ユーザー データをセッションに格納するために Global.asax を使用する .NET Web アプリのコードの一部です。

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) {
  if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState) {
    SetUserItem();
  }
}

private void SetUserItem() {
  if (Session["UserItem"] == null)
    Server.Execute("~/SetSessionUserObj.aspx", true);
}

...そして SetSessionUserObj.aspx.cs

protected void Page_Load(object sender, EventArgs e) {
  string ID = User.Identity.Name;

  MyUser myUser = new MyUser();
  UserItem userItem = myUser.GetUserItemByID(ID);

  if (userItem != null) {
    Session["UserItem"] = userItem;
  }
}

これは、global.asax でユーザーの ID にアクセスする方法の 1 つにすぎません。必ずしも Server.Execute を実行してユーザー データを設定する必要はありません (この質問の範囲外の他の理由で実行しただけです)。

幸運を。

于 2013-02-26T16:46:17.657 に答える