前言
最近同時詢問一個 asp.net webform 系統從 .net framework 2.x 升到 .net 4.x 時,javascript 原本使用 document.formName 的物件,卻變成 undefined 而造成錯誤。
研究與解決
到另一個沒有升級的版本去試,使用 document.formName 可以正常運作沒問題,但到 .net 4 的就是會變成 undefined。
於是檢查 Html 原始檔後發現, .net 4 的 Form 原本應該要有 name 屬性,卻不見了,只有 id 屬性。
而 .net 2.x 的 name 屬性有正常 Render 出來。
查看 ASP.NET 4 Breaking Changes ,原來預設 name 屬性是不會被 render 出來的,如果要讓 name 屬性 render 出來,要設定 pages 的 controlRenderingCompatibilityVersion 屬性,如下,
1 |
|
也要調整 requestValidationMode 為 2.0,如下,
1 |
|
當然,從舊版升級到新版的 .net 通常還要設定 xhtmlConformance 的 mode 屬性,有時升版後 js 變的怪怪的,可以 check 一下,設定成 Legacy 試看看哦! 如下,
1 |
|
參考資料
ASP.NET 4 Breaking Changes
ASP.NET – Form tag doesn’t have “name” attribute – xhtmlConformance
非常感謝同事 herman 的測試與回饋