我寫了一個aspx頁面,放一個GridView,GridView中添加一個模板列,其中放入一個LinkButton,顯示資料
現在的問題是
1)本地開發機器上
產生的該LinkButton的ID,Name分別是
ID: GridView1_ctl02 _lbtnSel
Name: GridView1$ctl02$ lbtnSel
2)部署伺服器上
產生的該LinkButton的ID,Name分別是
ID: GridView1__ctl2 _lbtnSel
Name: GridView1$_ctl2 $lbtnSel
經過比較,本地機器上產生的ID和Name都正常,ClientID使用一個底線_分隔,UniqueID用一個$分隔,其中 ctl02 表示GridView第二行
但伺服器上產生的ID和Name就有點不對了,雖然ClientID還是用一個底線_分隔,UniqueID用一個$分隔,但其中GridView第二行的表示方式有明顯的不同,它是 _ctl2
伺服器上將02改成了2,並且用底線開頭表示
這是為什嗎?這個問題導致了頁面的部分JS代碼不能正常運行了,因為連ID和Name的規則都發生了變化,一直找不到原因,請教大家,謝謝。
運行環境 .net 版本2.0.50727,Win2003
解決辦法:
在web.config 中,去掉 <xhtmlConformance mode= "legacy“/> 屬性
詳見頁面http://www.microsoft.com/china/msdn/library/webservices/asp.net/ASPNETusStan.mspx
為了滿足每個人的要求,Microsoft 建立了一個名為 xhtmlConformance 的新配置選項,您可以在 Web 網站的設定檔中設定該選項。新的配置選項使您能夠指定 Web 頁的 XHTML 一致性的層級。它的內容如下所示。
<configuration>
<system.web>
<xhtmlConformance
mode= "transitional " />
</system.web>
</configuration>
預設情況下,xhtmlConformance 設定為值 transitional。但是,還可以將該選項設定為值 strict 或 legacy。
如果將 xhtmlConformance 選項設定為 strict,那麼標準的 ASP.NET 控制項將不會再呈現某些屬性。例如,ASP.NET <form> 控制項將不再呈現 name 屬性。除非 ASP.NET 頁包含(不符合標準的)用戶端指令碼,否則從 transitional 模式切換到 strict 模式時,不會注意到任何變化。
如果將 xhtmlConformance 選項設定為 legacy,那麼對於某些元素和屬性(但不是全部),ASP.NET 架構將恢複為 ASP.NET 1.1 呈現行為。在這種情況下,ASP.NET 架構將呈現不與任何 XHTML 標準相容的內容,並且頁將不再通過 XHTML 標準驗證。例如,在 legacy 模式下,呈現 <br> 標記時不會呈現它需要的 XHTML 結束斜杠 ( <br /> )。只有在將現有 ASP.NET 1.1 應用程式遷移到 ASP.NET 2.0 的過程中遇到問題時,將 xhtmlConformance 設定為 legacy 模式才是有意義的。