我有一個簡單的ListView由DataPager分頁給出產品列表。當我們點擊產品時,我們打開產品詳情頁面。在詳細信息頁面上,我們希望「返回產品列表」,但當然我們希望它記住數據手冊所在的頁面。回到頁面ListView/DataPager時記得分頁
當然,這被認爲是一個自然的設計要求 - 什麼是簡單的現成的方式來做到這一點?
如果我們使用DataPager的QueryStringField屬性,我們可以在URL中獲得頁碼,所以我希望我可以在後面的鏈接中使用引用URL,但是我發現Request.UrlReferrer是不可靠的(當我使用F5例如在Internet Explorer中調試應用程序,Request.UrlReferrer始終爲空)。
我已經發現了一些成功與存儲在會話變量中的頁面數:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (Session["PagerIndex"] != null)
{
DataPager1.SetPageProperties((int)Session["PagerIndex"],
DataPager1.MaximumRows, false);
}
}
}
protected void DataPager1_PreRender(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
Session["PagerIndex"] = DataPager1.StartRowIndex;
}
}
這種方法也有一些缺點:
- 只有工作,如果QueryStringField是空白的(這樣的IsPostBack可以檢測)
- 每個尋呼機所需的會話/ cookie變量
- 如何重置會話/ cookie變量的問題出現
什麼是「正確」的方式來做到這一點?
感謝
我明白你的意思 - 通過URL將所需數據傳遞給詳細信息頁面,然後再返回,但似乎我必須爲每種情況定製代碼。我正在從一個環境中轉變爲每一分鐘細節的代碼,並一直期待爲我完成所有這些糟糕的任務!我想你的第一個建議是更合適的,因爲列表中的數據可能已經改變,導致重新排序等,從而使存儲的頁索引失效。 – Etherman
您可以將此邏輯添加到BasePage類或其他東西,因此您不需要逐個處理它。我還爲我的答案增加了另一個選項,我覺得它在某種程度上更通用。 – Stilgar
其實你最後的選擇是我如何理解你的第一個選擇。這是我決定實施它的方式 - 只有產品ID需要從詳細信息頁面傳遞。從那裏我可以確定要顯示哪個頁面,即使產品列表已被更改。 – Etherman