4

在我的 asp.net c# 页面上,我有两个带有 ajax CalendarExtenders 的文本框(开始日期和结束日期)。用户选择开始日期,然后选择结束日期。在选择结束日期时,我绑定我的网格,如下所示;

 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");
        }
    }

当用户转到该页面并单击后退按钮时,所有选定的日期和 gridview 数据都会消失。任何想法为什么视图状态正在消失?

4

3 回答 3

10

ViewState属于当前Page

看看: http: //www.codeproject.com/Articles/37753/Access-ViewState-Across-Pages

是的,我们可以跨页面访问视图状态变量。这只有在使用 Cross Page Posting 或 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 回答