疑難雜症:在ASP.NET AJAX中別使用<xhtmlConformance mode="Legacy"/>

  • 23582
  • 0
  • 2011-07-10

摘要:疑難雜症:在ASP.NET AJAX中別使用<xhtmlConformance mode="Legacy"/>

【原文位址】Gotcha: Don' t use <xhtmlConformance mode="Legacy"/> with ASP.NET AJAX
【原文發表日期】 Sunday, December 10, 2006 9:39 PM

最近,我幫過幾個開發人員,他們遇上了一些古怪的JavaScript問題,這些問題會在使用ASP.NET AJAX 以及他們的一些自訂的JavaScript腳本時出現。問題的主因在於,他們是把VS 2003 Web專案自動移植到VS 2005的,在他們的web.config文件中還配置有 <xhtmlConformance mode="Legacy"/> 。

假如你在你的 web 應用中編寫了自訂的客戶端JavaScript腳本,而且將使用AJAX的話,請讀下去,瞭解如何避免這個常見的疑難雜症 (註:想瀏覽我貼出的其他技巧,訣竅和疑難雜症的文章列單的話,請訪問這裡的這個網頁)。

症狀:

當你往先前成功地從VS 2003 升級到VS 2005的專案中添加新的客戶端JavaScript腳本時,你會看到奇怪的行為。在使用ASP.NET AJAX UpdatePanel 控制項時,這個奇怪的行為有時會包括頁面做整頁 postback,而不僅是遞增性的局部更新的情形。

當你打開你的web.config文件,你會看到其中的 <xhtmlConformance/> 元素,像這樣:

<configuration>

 

    <system.web>
        <xhtmlConformance mode="Legacy" />
    </
system.web>

</configuration>

背景:

ASP.NET 1.0 和 1.1 中的許多伺服端控制項並不輸出與XHTML相容的標識。ASP.NET 2.0 對此做了改變,在預設情形下,所有的伺服端控制項都會輸出與XHTML相容的標識 (註:你可以從這篇優秀的MSDN文章中進一步瞭解ASP.NET 2.0 中標準相容的情況)。

但在早期的ASP.NET 2.0 beta 中我們注意到的一件事情是,當把客戶應用升級時,其實,很多應用會假設頁面輸出並不是與XHTML相容的。把我們伺服器控制項的預設輸出改成與XHTML相容的話,它有時會修改頁面的視覺顯示。為向後相容的目的,我們添加了上面這個 <xhtmlConformance> 設置,允許開發人員可以設置控制項以Legacy模式(即與ASP.NET 1.1一樣,會輸出非XHTML標識),或者Transitional 模式 (XHTML Transitional) ,或者 Strict 模式 (XHTML Strict)顯示。

在預設情形下,當你使用VS 2003升級到VS 2005的Web專案移植嚮導時(無論是網站或 web 應用專案),你的web.config文件裡會添有這個legacy配置。

解決方案:

除非你已知當你的網站以XHTML模式執行時會有問題(但你還沒時間更正),我總是建議從你的web.config文件裡去掉 <xhtmlConformance> 這部分,或者你也可以明確地將其設置為Transitional 或 Strict。

這將使得你的HTML輸出是符合標準的,此外,這也將導致你的伺服器控制項的HTML輸出是well formed,即, 開始標籤和結束標籤總是相匹配的。當你使用AJAX技術來動態替換你的頁面上某些HTML元素的內容時,這尤其重要,否則的話,客戶端JavaScript腳本有時會搞不清楚容器元素,導致出錯。它也將確保ASP.NET AJAX會在你的網站上正常工作。

希望本文對你有所幫助,

Scott