大家在使用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所見即所得 (WYSIWYG)設計器裡也會遇上問題。
好訊息是,在ASP.NET 2.0中,有個比較乾淨的訣竅你可以用來重寫<form>控制項的action屬性。具體地來說,你可利用新的ASP.NET 2.0控制項適配器擴充架構來定製控制項的輸出,用你提供的值來覆蓋action屬性的值。這不要求在你的.aspx頁面裡做任何編碼改動,而只要在你的/app_browsers檔案夾裡添加一個.browser檔案,註冊使用一個控制項適配類即可輸出新的action屬性。
App_Browser檔案夾簡單介紹:
該可選的檔案夾包含.browser檔案。.browser檔案描述瀏覽器(不管是行動裝置瀏覽器,還是台式機瀏覽器)的特 征和功能。ASP.NET在安裝路徑下的Config\Browser檔案夾中安裝了大量.browser檔案,這些檔案供所有應用程式共用。我們只是把 當前應用程式特有的瀏覽器檔案放在App_Browser檔案夾下。.browser檔案的內容即時動態地進行編譯,以便向ASP.NET運行庫提供最新 的瀏覽器資訊。
讓我們簡單談談擁有一個自訂的.browser檔案可能有協助的情境。設想應用程式使用了一個在某個瀏覽器下不能有效呈現的控制項。在指定的瀏覽器中顯示宿首頁面時,可以編寫一個.browser檔案,迫使ASP.NET使用一個不同的適配器來產生該控制項。
<browsers>
<browser id="browserID">
<controlAdapters>
<adapter controlType="Samples.CustomControl" adapterType="Samples.Adapters.CustomControlAdapter" />
</controlAdapters>
</browser>
</browsers>
假設browserID與ASP.NET識別的標準瀏覽器之一相匹配,則上文所示的.browser檔案指示在指定的瀏覽器下使用CustomControlAdapter呈現CustomControl。