每一次 ASP.NET 改版,都難免對前一個版本作一些修改。這樣的改變就會造成版本的不相容,對於版本升級來說不得不小心了。以下列出找到的改變。這一篇主要參考自原文的 http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes
ViewState
Page 或 Control 的 ViewStateMode 目前多了 Inherit 的值,並且為預設值。在 ASP.NET 4 後,可以針對某個 control 關或開其 ViewState而不受 Parent 的影響。
controlRenderingCompatibilityVersion
ASP.NET 4 中的 control 所 Render 的 html 會與 ASP.NET 3.5 的結果不同。這會造成版本的相容性。因此,如果你的程式是由 V2.0 或 V3.5 使用Visual Studio 升級到V4.0 時,會在 web.config 中自動使用 controlRenderingCompatibilityVersion 為3.5。如下
<pages controlRenderingCompatibilityVersion="3.5" />
例如 asp:Menu. 在 V3.5 時所產生的 html 是一堆的table, tr, td。而 V4.0 時是 ul, li.
controlRenderingCompatibilityVersion="3.5" 時,Menu 的字型跑掉之外, html 是一堆的 table, tr, td。這是不被建議的。
controlRenderingCompatibilityVersion="4.0",改用 ul, li 來呈現。html簡化許多。
ClientID 的模式
ASP.NET 4 的預設模式為 Predictable, ASP.NET 3.5 的預設模式相當於 AutoID
<pages ClientIDMode="AutoID" />
HTMLEncode, UrlEncde 編碼單引號的方法不同
HtmlEncode ' => '
UrlEncode ' => %27
預設的Hash
預設的Hash算法,ASP.NET 2.0 為 SHA1, ASP.NET 4.0 為 HMACSHA256
預設不使用 System.Web.Mobile.dll(即在 root web.config 不再找到)
ASP.NET Request Validation 的變更:
ASP.NET 2.0 只針對網頁 aspx 驗證
ASP.NET 4.0 針對所有 ASP.NET 資源的任何 Request, ,
(包含 axd)
httpHandler, httpModule, WebService
要使用舊的驗證方式
<httpRuntime requestValidationMode="2.0" />
ASP.NET 4 無法作為 2.0, 3.5 應用的子應用運行
solution.
在 parent web.config
<location path="" inheritInChildApplications="false">
</location>
ASP.NET 4 網站無法作為 SharePoint 站點的子站點運行
HttpRequest.FilePath 屬性中不再有 PathInfo 的值
沒有留言:
張貼留言