天天看點

ASP.NET 中處理頁面“回退”的方法

我們在編寫基于 ASP.NET 的應用程式時,如果代碼執行出錯或檢測到異常,一般會提示使用者“傳回”或“回退”,或者在多步操作、清單/詳細的檢視界面中,也會給使用者提供回退到上一頁面的連結,對于這種情況,大家很快就會想到的簡單做法就是利用 Javascript 來實作,即 history.go(-1) ,但是由于 ASP.NET 頁面的 PostBack 機制,是以 history.go(-1) 可能還是目前頁面,而不能真正回退到上一頁面。

在 Classifieds Site Starter Kit 中,學習到一種不錯的關于回退的處理方法,可以分别在用戶端和伺服器控件中實作頁面的回退,代碼如下:

1)首先在頁面中增加兩個屬性

ASP.NET 中處理頁面“回退”的方法

//記錄上一個頁面的資訊

ASP.NET 中處理頁面“回退”的方法

private string UrlReferrer

ASP.NET 中處理頁面“回退”的方法

{

ASP.NET 中處理頁面“回退”的方法

get

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

return ViewState["UrlReferrer"] as string;

ASP.NET 中處理頁面“回退”的方法

}

ASP.NET 中處理頁面“回退”的方法

set

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

ViewState["UrlReferrer"] = value;

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

//記錄 PostBack 的次數

ASP.NET 中處理頁面“回退”的方法

public int NumPostBacks

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

if (ViewState["NumPostBacks"] != null)

ASP.NET 中處理頁面“回退”的方法

return (int)ViewState["NumPostBacks"];

ASP.NET 中處理頁面“回退”的方法

else

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

ViewState["NumPostBacks"] = 0;

ASP.NET 中處理頁面“回退”的方法

return 0;

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

ViewState["NumPostBacks"] = value;

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

2)在 Page_Load 事件記錄上一頁面位址、更新 Postback 次數、設定回退連結的位址

ASP.NET 中處理頁面“回退”的方法

// 記錄上一頁面的資訊或更新 PostBack 的次數

ASP.NET 中處理頁面“回退”的方法

protected void Page_Load(object sender, EventArgs e)

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

if (!Page.IsPostBack)

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

if (Request.UrlReferrer != null)

ASP.NET 中處理頁面“回退”的方法

this.UrlReferrer = Request.UrlReferrer.ToString();

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

NumPostBacks++;

ASP.NET 中處理頁面“回退”的方法
ASP.NET 中處理頁面“回退”的方法

int goBackSteps = NumPostBacks + 1;

ASP.NET 中處理頁面“回退”的方法

BackLink.NavigateUrl = String.Format("javascript:history.go(-{0});", goBackSteps);

ASP.NET 中處理頁面“回退”的方法

3)直接在代碼中處理回退操作(如 Back_Click),可以直接調用如下方法

繼續閱讀