나는이 웹 응용 프로그램을 사용하여 생방송에 가깝지만 사용자가 뒤로 버튼을 사용한 후 gridviews의 잘못된 데이터 인 한 가지 눈부신 문제가 여전히 있습니다. 이것은 또 다른 mastersearch/detail 유형 페이지입니다. 사용자는 search.aspx 페이지의 gridview에 표시되는 항목을 검색합니다. 사용자는 항목을 클릭하여 세부 정보 페이지 인 itemdetails.aspx로 이동할 수 있습니다. 사용자가 뒤로 버튼을 사용할 때까지 모두 제대로 작동합니다.더 많은 뒤로 버튼 및 gridview 문제
예를 들어 dog를 검색하고 search.aspx에서 gridview의 개 목록을 가져옵니다. 개 레코드를 클릭하고 itemdetails.aspx에 대한 세부 정보를보십시오. 고양이를 검색하고 search.aspx의 gridview에서 고양이 목록을 얻으십시오. 세부 정보를 보려면 고양이를 클릭하고, 고양이 목록으로 search.aspx로 돌아가려면 세부 정보를 보려면 다른 고양이를 클릭하십시오. 지금까지는 괜찮습니다. 문제는 사용자가 고양이 세부에서 고양이 검색 재개발, 개 세부 사항으로 돌아간 다음 개 검색 결과로 돌아갈 때까지 몇 번 뒤로 가면 시작됩니다. 이제 사용자가 검색 결과 행 3에서 개를 클릭하면 가장 최근 검색에서 행 3의 고양이가 표시됩니다.
캐시를 지우려고했는데, 그리드를 강제로 다시로드하지만 사용자는 항상 페이지 만료 페이지를보고 데이터를 다시 제출해야합니다. 나는 Server.Transfer 및 Response.Redirect 검색 페이지를 그리드를 다시로드하려고 시도했지만 사용자가 레코드를 두 번 클릭해야합니다. 한 번 만료 된 그리드를 다시로드 한 다음 다시 세부 사항으로 이동해야합니다. 또한 그리드 리바운드를 시도하고 4-5 일이 넘는 다른 많은 것들을 기억하지 못합니다. 생성하지 않고 예상치 못한 부작용없이 문제를 해결 한 것은 없습니다. 이 시점에서 나는 모든 것을 다시 작성해야만하는 해결책을 원합니다. 어떤 제안을 주셔서 감사합니다!
공공 부분 클래스 검색 : System.Web.UI.Page { 공공 문자열되는 searchString; // 검색 상자 공공 문자열 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에 쿠키 또는 코딩 검색 매개 변수를 사용하고 있습니까? 쿠키가 만료되거나 덮어 쓸 수 있으므로 URL을 권하고 싶습니다. –
검색 조건은 전역 변수에 저장됩니다.검색 용어는 Global.Searchdata 변수에 저장됩니다. search.aspx의 pageload에서 변수가 검색되고 마지막에 그리드를 채우는 SQL 문에 매개 변수로 전달됩니다. itemdetail 기준과 유사합니다. 항목의 링크 버튼을 클릭하면 컨트롤의 명령문이 전역 변수 ISBNData에 저장됩니다. ItemDetail.aspx는 값을 검색하고 해당 레코드를 표시합니다. – user1706348