Viewstate在response.redirect上消失

本文关键字:消失 redirect response Viewstate | 更新日期: 2023-09-27 17:55:05

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

 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在response.redirect上消失

ViewState属于当前的Page

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

是的,我们可以跨页面访问viewstate变量。这只是如果跨页张贴或服务器可能。Transfer用于重定向将用户转到其他页面。如果反应。使用redirect,然后是ViewState不能跨页访问

所以你可以用Server.Transfer代替或者用Session

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

正如Tim在他的帖子中建议的那样,要么将所需的数据存储为会话变量,要么使用server.transfer。

请看这里的viewstate概览:http://www.codeproject.com/Articles/37753/Access-ViewState-Across-Pages

在我看来,这个问题是因为你使用Ajax与calEndDate_TextChanged进行自动发布。

在你提交之后,当你按下后退按钮时,浏览器既不记得也不能保存你用Ajax调用的所有自动发布数据所做的更改,并且你失去了它们。

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

然后当你用浏览器返回时,浏览器会加载之前的状态,大多数浏览器会记住用户的所有输入。另外,背面的视图状态与以前相同,因为没有从Ajax更改。