4

MasterPage を持つ Web フォーム内にユーザー コントロールがあります。MasterPage にはログアウト ボタンがあります。

protected void lbtnLogout_Click(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
        Roles.DeleteCookie();
        Session.Clear();
        Response.Redirect("~/Account/WebLogin.aspx");
    }

ログアウト ボタンをクリックすると、上記のイベント ハンドラが呼び出される前にユーザー コントロールがリロードされるため、データベースへの不必要なトリップが発生します。

ポストバックはどのように処理すればよいですか? ユーザーコントロールでそれを無視する方法はありますか?

前もって感謝します。

更新: 先に述べておくべきでした。実装フレームワーク「WebFormsMvp」を使用しています。MasterPage を含む Web フォームには、実行時にそれぞれのプレゼンターにバインドされるビューであるいくつかのユーザー コントロールがあります。Page_Load イベントの前にデータがフレームワークによって各ユーザー コントロールにバインドされているため、どのユーザー コントロールでも Page_Load を処理していません。

それに応じて、この質問のタグを更新します。

4

4 に答える 4

3

1 つのオプションは、サインアウト用に完全に新しい aspx / ashx ページを追加することです。そのページには、サインアウトロジックを含む(およびログインページにリダイレクトする)独自のプレゼンターがあります(または独自のプレゼンターを持つユーザーコントロールが含まれています)。

次に、ログアウト リンクを新しいページを指す通常のタグに変更します(現在のようにポストバックを使用するのではなく)。

このアプローチは基本的にhttp://forums.asp.net/t/1369480.aspx/1の 2 番目の投稿 (最初の返信) と同じで、 http://webformsmvp.com/の動作に合わせて調整されています。

于 2011-11-03T20:54:39.033 に答える
0

huMpty duMpty の答えは正しいはずです。

データベースに移動する前に、プレゼンターでも IsPostBack (base.IsPostBack だと思います) を確認できます。

もちろん、これはプレゼンターに依存し、常に DB から新しいデータを取得する必要があるため、DB 呼び出しをスキップするためにいくつかのパラメーターを確認する必要がある場合があります..?

于 2011-11-03T19:47:43.583 に答える
0

いいえ、イベントLoadの前に法線が発火するのを止めることはできません (オーバーライドできますが、それは範囲外です) 。ButtonASP.NET は、イベントを発生させるために何かが変更されたことを知るために、コントロールを再読み込みする必要があります。ASP.NET がどのようにイベント処理を行っているかをよりよく理解するには、次の記事を参照してください。

ASP.NET ページのライフ サイクルの概要

于 2011-11-03T12:38:26.843 に答える
0

でPage.IsPostBackを使用しpageloadます。

于 2011-11-03T12:44:05.537 に答える