2011-03-23 17 views
1

我正在開發ASP.Net 3.5項目的自定義URL重寫器。這個重寫器在功能上與大多數重寫器的功能不同,唯一的區別是友好的URL集合沒有從web.config文件加載 - 它來自數據庫。我做了一個天真的假設,即從零開始開發一個定製的重寫模塊會很容易,但現在我知道我把自己放在了一起。讓我們直接看看技術問題。每當調用RewritePath()時,Page.IsPostBack爲false

在測試重寫器時,我設置了一個友好的URL,將用戶轉到Web表單。從這個表格回傳不應改變友好的地址,因爲任何人所期望的,所以

http://my.web.site/app_root/FriendlyURL總是被改寫爲http://my.web.site/app_root/not_friendly/form.aspx

一切都很好,當瀏覽器首次加載FriendlyURL。頁面出現並且功能完整。但是,當表單重新發布到服務器時,頁面只是重新加載,但在服務器端,IsPostBack爲false。這就像F5被擊中,除了一個HTTP POST確實發生。不出所料,當互動通過「不友好」的URL發生時,POST動作會按照預期觸發回發。這個證據表明HttpContext.RewritePath以某種方式混淆了頁面生命週期,使得它失去了回發操作的意義。任何方向?謝謝。

+0

我認爲Humberto的權利,但對於參考我記得,至少2.0,你必須調整Form.Action值,以及重寫網址在使用回發的網頁上。 – harpo 2011-03-24 00:37:13

回答

3

感謝StackOverflow,另一個nearly-duplicate problem給了我關於核心問題的提示。總之,

服務器端組件設置一項PostBackUrl屬性亂用回發期間路徑重寫系統。或者在路徑重寫期間回發系統被搞亂。 (因果關係尚不清楚,但效果是我的問題描述。)

任何ASP:LinkBut​​ton的,ASP:按鈕或ASP:ImageButton的那臺一項PostBackUrl(無論是在形式,母版頁,或用戶控制級別)將導致web表單包含一個__PREVIOUSPAGE隱藏元素,其內容不透明,但在回發期間它有一定的作用。這是我的問題:有幾個asp:LinkBut​​tons設置PostBackUrl屬性。

當頁面(表單+主頁面+​​用戶控件)沒有PostBackUrl'd元素時,__PREVIOUSPAGE消失並且回發混亂消失。因此,在我查看整個站點中的每個asp:LinkBut​​ton並將它們轉換爲普通的<a>元素後,問題就解決了。

相關問題