4

私のasp.netc#ページには、ajax CalendarExtendersを含む2つのテキストボックス(開始日と終了日)があります。ユーザーは開始日を選択してから終了日を選択します。終了日を選択したら、以下に示すようにグリッドをバインドします。

 protected void calEndDate_TextChanged(object sender, EventArgs e)
    {
        BindGrid();
    }

グリッドには、次のコードを含むコマンドボタンがあります

 protected void gvAllRoomStatus_RowCommand(object sender, GridViewCommandEventArgs e)
    {    
        if (e.CommandName == "Manage")
        {    
            GridViewRow row = gvAllRoomStatus.Rows[Convert.ToInt16(e.CommandArgument)];    
            int BookingID = Convert.ToInt32(row.Cells[1].Text);              

            DataClassesDataContext context = new DataClassesDataContext();
                Session["BookingID"] = BookingID;
                Response.Redirect("CheckIn.aspx");
        }
    }

ユーザーがそのページに移動して戻るボタンをクリックすると、選択したすべての日付が表示され、グリッドビューデータが表示されなくなります。ビューステートが消える理由はありますか?

4

3 に答える 3

10

ViewState現在の に属しPageます。

ご覧ください: http://www.codeproject.com/Articles/37753/Access-ViewState-Across-Pages

はい、ページ間でビューステート変数にアクセスできます。これは、クロス ページ ポスティングまたは Server.transfer を使用してユーザーを他のページにリダイレクトする場合にのみ可能です。Response.redirect が使用されている場合、ViewState はページ間でアクセスできません

したがって、Server.Transfer代わりに使用するか、Session.

于 2013-01-20T22:23:49.543 に答える
1

calEndDate_TextChanged私の意見では、あなたが抱えている問題は、 Ajax を使用して自動ポストバックを行うためです。

送信後、[戻る] ボタンを押すと、ブラウザは、Ajax 呼び出しによるすべての自動投稿データで変更内容を保存できず、それらを失います。

私にとっては、テキスト変更の自動ポストバックを削除し、不要なため Ajax を削除し、ユーザーがデータを送信するときに定期的に完全なポストバックを作成します。

次に、ブラウザで元に戻すと、ブラウザは以前の状態をロードし、ほとんどのブラウザはユーザーの入力内容とすべてを記憶します。また、Ajax からの変更がないため、ビューステートは以前と同じです。

于 2013-01-20T22:39:08.300 に答える
1

Viewstate を非常に単純化した方法で見ると、現在表示しているページの最後の状態のカーボン コピーまたはキャッシュとして表示されます。したがって、同じページ自体であっても、任意のページへのリダイレクトを行うことは、基本的に新たなスタートです。ビューステートは、すべての意図と目的に適用されなくなり、新しいページにいます。

Tim が投稿で提案しているように、必要なデータをセッション変数として保存するか、server.transfer を使用します。

ビューステートの概要については、こちらをご覧ください: http://www.codeproject.com/Articles/37753/Access-ViewState-Across-Pages

于 2013-01-20T22:32:35.740 に答える