2010-03-12 68 views
5

我正在使用Asp.net 2.0。我做了一個server.transfer從第1頁到第2頁。該URL仍然是第1頁。現在我單擊第2頁上的鏈接,這會將我轉到第3頁。因此,該網址應保留在第1頁。相反,瀏覽器現在顯示第2頁。這是預期的行爲?Server.transfer第二次更改URL

我實際上是試圖隱藏URL中的參數。

  1. 我不能使用response.redirect,因爲我無法從這裏訪問上一頁。
  2. 我試過使用PostBackUrl,但這對我不起作用,因爲我需要將數據保存在當前頁面上,然後在沒有錯誤發生時顯示下一頁。如果數據不正確,和/或有錯誤,那麼我需要向用戶顯示相同的頁面。
  3. 現在我想嘗試server.transfer,但它顯示了上一頁的URL。

任何人都可以指向正確的方向嗎?

+0

我結束了使用會話,併爲我解決了這個問題。但是我仍然想知道這個問題的解決方案是什麼。 – 2010-03-12 22:20:28

回答

1

這是預期的行爲。

當您使用Server.Transfer ASP.NET停止通過ThreadAbortException處理原始請求,然後立即在同一線程中開始處理新請求。新請求運行並將其輸出發送到瀏覽器。瀏覽器不知道任何關於Server.Transfer。所有瀏覽器都知道它請求了page1,服務器將它發回了一些內容,作爲開發人員,你知道其實是來自page2。

回傳是page2 url泄漏出去的地方,如果它意圖被隱藏。爲了讓page2內容處理回發,它必須回發到page2。如果它重新發布到page1,page1將不知道如何處理viewstate和表單事件,因爲它們實際上是由page2生成的。爲了實現這一點,page2提供的<form>元素的actionpage2。看看在Server.Transfer後的瀏覽器你的HTML源代碼,你會看到這一點:

<form name="aspnetForm" method="post" action="Page2.aspx" id="aspnetForm"> 

使用傳統的WebForms,完全隱藏來自用戶的URL唯一真正的方法是不使用回發,並擁有所有頁面2上的鏈接實際上鍊接回頁面1,並將所有邏輯添加到page1中以適當地處理它。

或者,您根本無法使用回發。如果您通過ajax執行了所有操作,那麼根本沒有瀏覽器URL更改,您應該能夠爲用戶獲得更好的體驗。

更好的辦法是使用ASP.NET MVC,它將您推向友好的REST式的URL,這對用戶來說很容易理解,並且您可以在內部映射到更復雜的參數。

相關問題