我即将接近这个网络应用程序,但仍然有一个明显的问题,这是用户使用后退按钮后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