2

ユーザーコントロールを含む単純なページで一般的なリストを操作しています。

セッション変数を使用して、このリストにデータを入力します。このセッション変数は、Button_click イベントで設定されます。

ユーザーがボタンをクリックすると、セッション変数が設定され、ポストバックが発生します。問題は、Page_load が Button_clicked イベントの前に呼び出されることです...ご存知のように、これは標準的なページのライフサイクルです。

最後に、セッション変数が page_load の後に設定されるため、一般的なリストは更新されません。

EDIT:私のセッション変数は、私のユーザーコントロールのボタンクリックでデリゲートによって処理される関数に設定されています。

これを防ぐ解決策はありますか?セッション変数を使用せずに、多くのポストバックでこのリストの値を保持するソリューションはありますか?

ご協力ありがとうございました、

クエンティン

4

4 に答える 4

1

解決策を見つけました。メイン ページの Pre_render 関数をオーバーライドする必要があります。実際、ライフサイクルは、Page_load->Button_click->Page_PreRender です。

したがって、私の Pre_render 関数では、Session 変数を設定して、必要に応じて使用できます。

私が理解したことから、Pre_Render イベントは、ページに表示される直前にコントロールの値を初期化するためによく使用されます。

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

于 2012-07-05T08:45:12.863 に答える
1

Click イベントでは、次の 3 つのことを行う必要があります。

  1. ジェネリック リストをセッションに保存します。
  2. リストが保存されたことを示すフラグ (セッション値の場合もあります) のような Cookie を保存します。
  3. Resonse.Redirect(Request.RawURL)同じページにリダイレクトします。

そして Page_Load イベントでは、次のようにする必要があります。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (Session["MyFlag"] != null)
        {
            //Perform whatever you need to do with your already saved generic list in Session
            Session["MyFlag"] = null;
        }
    }
}

ポストバック全体で一般的なリストのような複雑なオブジェクトを保存する必要がある場合、セッションはあなたの友達です。値だけを保存する必要がある場合は、Cookie または ASP.HiddenField を使用できますが、これには Session を使用する方が適切です。

于 2012-07-04T15:00:15.913 に答える
0

次の内部でセッションを設定してみませんか。

if(!IsPostback)
{
    // your session setting here (or method)
}

したがって、すべてのポストバックで値を設定することなく、ポストバック全体で値を保持します。

また、!IsPostbackまたはcickイベントから簡単に呼び出すことができるメソッドを宣言することもできます。

于 2012-07-04T15:01:35.073 に答える
0

コードを Page_Load から Page_PreRender に移動してみてください。これは、ボタン クリック イベントの後に発生します。これで問題が解決するはずです。

于 2012-07-04T15:13:48.417 に答える