2013-01-20 29 views
3

在我的asp.net c#頁面上,我有兩個帶ajax CalendarExtenders的文本框(開始和結束日期)。用戶選擇開始日期,然後選擇結束日期。在選擇結束日期時,我按如下所示綁定我的網格;viewstate在response.redirect上消失

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的數據消失。任何想法爲什麼視圖狀態正在消失?

回答

9

ViewState屬於當前Page

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

是的,我們可以在頁面訪問的視圖狀態變量。如果使用跨頁面發佈或Server.transfer將用戶重定向到其他頁面,則只能使用 。 如果使用Response.redirect,則不能通過頁面訪問ViewState 。

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

+0

server.transfer也不起作用。可能是我有我的網格周圍的更新面板。請看看標記 – rumi

+0

除此之外,我認爲當你提交一個頁面,然後你回去的時候,大多數瀏覽器會保留你輸入的內容(或者我錯了?)。我認爲他犯了一些其他錯誤,而不是被瀏覽器保留,例如多次回發可能是一個原因。另外我在這裏沒有看到如何使用ViewState。 – Aristos

+0

@ user1050179:您可能想在這裏看看:[在ASP.NET AJAX網站中啓用後退按鈕支持](http:// geekswithblogs。net/frankw/archive/2008/10/29/enable-back-button-support-in-asp.net-ajax-web-sites.aspx) –

1

Viewstate以非常簡單的方式查看它是將它看作是當前頁面上一個狀態的副本或緩存。因此,重定向到任何頁面,即使是同一頁面本身,本質上也是一個全新的開始。視圖狀態不再適用於所有的意圖和目的,而是在一個新的頁面上。

正如Tim在他的文章中所建議的,要麼將所需數據存儲爲會話變量,要麼使用server.transfer。

看看這裏的視圖狀態很好的概述: http://www.codeproject.com/Articles/37753/Access-ViewState-Across-Pages

+0

我無法在評論中添加我的標記。這很奇怪,或者我需要以不同的方式添加標記 – rumi

+0

您應該將其添加到您的原始文章並將其標記爲更新,以便每個人都可以看到您的問題是如何演變的。 –

1

在我看來,你有問題,是因爲你讓汽車後背上與使用Ajax calEndDate_TextChanged

提交後,當您按下後退按鈕時,瀏覽器也不記得您可以使用Ajax調用保存所有自動發佈數據的變化,並且您將失去它們。

對於我刪除文本更改自動回發,刪除Ajax,因爲你不需要,並提交一個正常的完整回發時,當用戶提交他們的數據。

然後,當您使用瀏覽器回來時,瀏覽器加載之前的狀態,大多數瀏覽器記住用戶的輸入和輸入。同樣在這個背景上,視圖狀態與以前相同,因爲沒有從Ajax中更改。