viewstate在response.redirect上消失

在我的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数据都会消失。 任何想法为什么观点正在消失?

ViewState属于当前Page

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

是的,我们可以跨页面访问视图状态变量。 仅当使用跨页面发布或Server.transfer将用户重定向到其他页面时,才可以执行此操作。 如果使用Response.redirect,则无法跨页面访问ViewState

因此,您可以使用Server.Transfer或使用Session

Viewstate以非常简单的方式查看它是将其视为您当前所在页面的最后状态的副本或缓存。 因此,重定向到任何页面,甚至是同一页面本身,都是一个新的开始。 视图状态不再适用于所有意图和目的,您在新页面上。

Tim在post中建议,要么将所需数据存储为会话变量,要么使用server.transfer。

看看这里有一个很好的viewstate概述: http : //www.codeproject.com/Articles/37753/Access-ViewState-Across-Pages

在我看来,你遇到的问题是你使用Ajax使用calEndDate_TextChanged进行自动回calEndDate_TextChanged

提交后,当您按下后退按钮时,浏览器无法记住既不能使用Ajax调用保存所有自动发布数据的更改,也会丢失它们。

对我来说,删除文本更改自动回发,删除Ajax,因为您不需要,并在用户提交数据时进行定期完整回发。

然后,当您使用浏览器进行回放时,浏览器会加载以前的状态,并且大多数浏览器会记住用户的所有输入。 同样在那个背面,viewstate与之前的相同,因为没有从Ajax的变化。