1

マスター ページがコンテンツ ページとマージされるときにイベントが発生する順序を次に示します。

http://msdn.microsoft.com/en-us/library/dct97kc3.aspx

だから、私の問題は次のとおりです。

1 つのログイン ページ (マスター ページを使用しない)、1 つのマスター ページ、および数百のコンテンツ ページがあります。

マスター ページでログイン セッションを確認しますSession["loggedInUser"](ログインしていない場合は、ログイン ページにリダイレクトします)

ログインしていないときに、あるコンテンツ ページのアドレスを入力すると、マスター ページでログイン セッションをチェックし、ログイン ページにリダイレクトする必要がありますよね? ただし、ここには 2 つのケースがあります。

コンテンツページでは、何も使わなければSession["loggedInUser"]ログインページにリダイレクトされるので、ここでOK!

Session["loggedInUser"]2 番目のケース:たとえば、コンテンツ ページにユーザー名を表示するために使用する場合:

UserInfo loggedInUser = (UserInfo)Session["loggedInUser"];

コンテンツ内ページはマスターページの前に起動されるため、page_loadpage_loadここでは null オブジェクトを返します。したがって、ログインページにリダイレクトする代わりに null オブジェクトを表示します。

Page_PreInitマスターページでも試しましたが、助けにはなりませんでした

protected void Page_PreInit(object sender, EventArgs e)
{
    if (Session["loggedInUser"] == null)
    {
        Response.Redirect("~/Login.aspx");
    }
}

なにか提案を?

4

4 に答える 4

1

ではなくSession["loggedInUser"]、コンテンツ ページでチェックすることも、代わりに でマスター ページ チェックを行うこともできます。同じ問題があり、すべてのコンテンツ ページで引き続き使用できるように、マスター ページオプションを使用しました。Page_PreRender()Page_Load()Page_Init()Page_Load()Page_Init()Page_Load()

編集:そうでPage_Init() はありません PreInit()

于 2011-05-09T08:08:56.233 に答える
1

最後に、私は解決策を思いつきました:

BasePage次のようなクラスを作成します。

public class BasePage : System.Web.UI.Page
{
    protected override void OnLoad(EventArgs e)
    {
        if (Session["loggedInUser"] == null)
        {
            Response.Redirect("~/Login.aspx");
        }
        base.OnLoad(e);
    }
}

そして、コンテンツページでは、から継承する代わりにPage、に変更するBasePageと、完全に機能します

ご支援いただきありがとうございます

良い一日;)

于 2011-05-09T10:26:09.300 に答える
1

おそらく、値を使用していると言うとき、それを表示するためにメソッドなどSession["loggedInUser"]を呼び出していますか?.ToString()

その場合、null オブジェクトを使用する前に確認する必要があります。どのような場合でも、メソッドを使用する前にオブジェクトの存在を確認することをお勧めします。

if (Session["loggedInUser"] != null)
{ ... }

Session オブジェクトがインスタンス化されない限りコードが実行されないことが確実な場合にのみ、null 参照をチェックせずにメソッドを使用できます。

http://msdn.microsoft.com/en-us/library/03sekbw5.aspx

于 2011-05-09T08:24:07.347 に答える