您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關ASP.NET和URL重寫如何處理PostBack,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
在ASP.NET和URL重寫處理PostBack
大家在使用ASP.NET和URL重寫時經常遇到的一個疑難雜癥跟處理postback場景有關。具體地來說,當你在一個網頁上放置一個 <form runat="server"> 控件時,ASP.NET 會自動地默認輸出標識的action屬性指向當前所在頁面。當使用URL重寫時,會出現這樣的問題,<form> 控件顯示的URL不是原先請求的URL(譬如,/products/books),而是重寫過后的URL(譬如,/products.aspx?category=books)。這意味著,當你做一個postback到服務器時,URL不再是你原先干凈利落的那個了。
在 ASP.NET 1.0和1.1中,大家經常訴諸于繼承<form> 控件生成他們自己的控件,來正確地輸出要使用的action屬性。雖然這可以工作,但結果有點亂,因為這意味著你需要更新你所有的頁面來使用這個另外的表單控件,而且有時在Visual Studio所見即所得設計器里也會遇上問題。
好消息是,在ASP.NET 2.0中,有個比較干凈的訣竅你可以用來重寫<form>控件的action屬性。具體地來說,你可利用新的ASP.NET 2.0控件適配器擴展架構來定制控件的輸出,用你提供的值來覆蓋action屬性的值。這不要求在你的.aspx頁面里做任何編碼改動,而只要在你的/app_browsers文件夾里添加一個.browser文件,注冊使用一個控件適配類即可輸出新的action屬性。
你可在這里查看一個我創建的樣例實現,其展示了該如何實現與URL重寫協作的表單控件適配器(Form Control Adapter) 。它在我上面使用的***個(Request.PathInfo),第二個方法(UrlRewriter.Net 模塊)中都工作,它使用Request的RawUrl屬性獲取原先沒改寫過的 URL來顯示。而在第四個方法(ISAPIRewrite過濾器)中,你可以獲取ISAPI過濾器保存在Request.ServerVariables["HTTP_X_REWRITE_URL"] 中的原先的URL值。
我上面的FormRewriter類實現在標準的ASP.NET和ASP.NET AJAX 1.0網頁上應該都工作(如果你遇上問題的話,告訴我一聲)。
正確地處理CSS和圖像引用
不少人在***次使用URL重寫時,有時會遇上一個疑難雜癥,就是他們發現他們的圖像和CSS樣式表引用有時會停止工作。這是因為他們在HTML網頁里有對這些文件的相對引用,當你開始在應用里重寫URL時,你需要意識到瀏覽器經常會在不同的邏輯層次結構層上(logical hierarchy levels)請求文件,而不是實際存儲在服務器上的東西。
譬如,如果我們上面的/products.aspx網頁對.aspx 網頁里的logo.jpg有一個相對引用,但是通過 /products/books.aspx這個URL來請求的,那么瀏覽器在顯示網頁時,將會發出一個對/products/logo.jpg的請求,而不是對/logo.jpg的請求。要正確地引用這個文件,確認你用根目錄限定了(root qualify)CSS和圖像引用(“/style.css”,而不是 “style.css”)。對于ASP.NET控件,你也可以使用“~”句法從你應用的根目錄來引用文件(譬如,<asp:image imageurl="~/images/logo.jpg" runat="server"/>) 。
關于“ASP.NET和URL重寫如何處理PostBack”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。