我即將接近這個網絡應用程序,但仍然有一個明顯的問題,這是用戶使用後退按鈕後gridviews中的錯誤數據。這是另一個mastersearch/detail類型頁面。用戶搜索項目,這些項目顯示在search.aspx頁面的gridview中。用戶可以單擊項目以轉到詳細信息頁面itemdetails.aspx。所有工作正常,直到用戶使用後退按鈕。更多後退按鈕和gridview問題
例如,搜索狗,在search.aspx的gridview中獲取狗列表。點擊狗記錄並在itemdetails.aspx上查看他們的詳細信息。搜索貓,在search.aspx中獲取gridview上的貓列表。點擊貓查看詳細信息,使用返回到貓的列表search.aspx,點擊另一隻貓查看詳細信息。到目前爲止,一切都很好。問題始於用戶返回幾次,從貓的詳細信息到貓搜索結果,回到狗的詳細信息,然後回到狗的搜索結果。現在,如果用戶在搜索結果第3行中單擊狗,則顯示的詳細信息頁面是最近一次搜索中來自第3行的貓。
我試過清除緩存,這迫使網格重新加載,但用戶總是看到頁面過期頁面,並且必須重新提交數據。我嘗試了Server.Transfer和Response.Redirect到搜索頁面來嘗試重新加載網格,但是這使得用戶必須兩次單擊記錄(一次重新加載過期的網格,然後再次去詳細信息。)還嘗試重新綁定網格,以及4-5天左右的其他許多事情,我不記得它們全部。沒有任何東西可以解決問題而不會產生意想不到的副作用在這一點上,我只想要一個解決方案,即使我必須重寫整個事情。感謝您的任何建議!
公共部分類搜索:System.Web.UI.Page { 公共字符串搜索字符串; //在搜索框中 公共字符串searchISBN輸入信息; //在GridView的ISBN持有點擊項目
private void GetProducts()
{
try
{
DataSet ds = DataAccess.GetProductsPerCategory(searchString);
GridView1.DataSource = ds;
GridView1.DataBind();
}
catch (SqlException ex)
{
lblSearch.Text = "Cannot get product data." + ex.Message;
}
}
protected void Button2_Click(object sender, EventArgs e)
//button in gridview, sends to item detail page
{
LinkButton btn = (LinkButton)(sender);
searchISBN = btn.CommandArgument;
//call product detail page, pass ISBN
Global.SetISBNData = searchISBN;
Server.Transfer("ItemDetail.aspx");
}
//when this search page is called from site.master page,
//search criteria passed to GetProducts
protected void Page_Load(object sender, EventArgs e)
{
if (IsExpired())
{
Response.Redirect("Expired.aspx");
}
else
{
this.SaveTimeStamps();
searchString = Global.GetSearchData;
GetProducts();
}
}
private bool IsExpired()
{
if (Session["Search_SearchStamp"] == null)
return false;
else if (ViewState["SearchStamp"] == null)
return false;
else if (ViewState["SearchStamp"].ToString() ==
Session["Search_SearchStamp"].ToString())
return false;
else
return true;
}
private void SaveTimeStamps()
{
DateTime dtm = DateTime.Now;
ViewState.Add("SearchStamp", dtm);
Session.Add("Search_SearchStamp", dtm);
}
}
你如何在頁面之間存儲數據?您是否在URL中使用Cookie或編碼搜索參數?由於Cookie可能會過期或被覆蓋,因此我建議使用網址。 –
搜索條件存儲在全局變量中。搜索詞被放入一個全局變量Global.Searchdata。在search.aspx的頁面加載中,變量被檢索並作爲參數傳遞給最終填充網格的sql語句。與itemdetail標準類似。當點擊該項目的鏈接按鈕時,該控件的命令參數被放入全局變量ISBNData中。 ItemDetail.aspx檢索該值並顯示該記錄。 – user1706348