當頁面上的 Button 或 LinkButton 用到 PostBackUrl 屬性時,使用者按下 Button 網頁會直接轉到 PostBackUrl 所指定的網頁(以下稱為 target page)。這個動作有如 <a>
一般。
如果 target page 沒有用到 Page.PreviousPage
的屬性,結果就跟 <a>
完全一樣了。
當 target page 第一次用到 Page.PreviousPage
的時候,source page 會被 "load" 到程式中。這個 "load" 的動作,會觸動 soruce page 的 Page.Load 事件。既使在 target page 裡,多次使用 Page.PreviousPage
屬性,這個 "load" 動作只會被執行一次。
這個事實,有兩種意義:
這裡要注意,source page 再度被 "load",其 IsPostBack
屬性會是 True。所有網頁上的資料都仍存在。如果,在 source page 的 Page.Load 事件裡,將控制項的內容更改了,target page 會取得被更改之後的內容。
如果 source page 上的 Button 除了 PostBackUrl 屬性,也定義了 OnClick 事件處理,當 target page 用到 Page.PreviousPage
屬性時,OnClick 事件仍然會正常處理。事件的發生順序如下:
Page.PreviousPage
。由上面的分析可知,一旦 Button 被 Click,在 Server 的程式碼已經沒有機會再阻止或更改 target page 的顯示了。在 source page 的 client script 或許可以更動這個行為。
當然 Response.Redirect()
方法還是可以使用的。不過,Server.Transfer()
好像有些問題。沒有進一步瞭解之前,不要輕易使用。Response.Redirect()
方法可以在 source page 或 target page 來執行。不過,既然用了 PostBackUrl,重要的處理流程應該交由 taget page 決定。
如果程式的流程需要依靠 source page 上的資料決定,比較容易的方法還是交給 taget page 的 Page.Load 事件處理來決定。這是比較標準又容易懂的方法。