Asp.net

升級到 .NET 4.5 後出現 iFrame 解析器錯誤

  • July 23, 2013

我們最近將我們所有的 WebForms 項目升級到 .NET 4.5,並且在載入帶有iFrame元素的頁面時遇到了解析器問題。我們通過將iFramefrom轉換為HtmlGenericControl來糾正這個問題HtmlIframe。當我們在本地執行程式碼時,這已經糾正了所有解析器錯誤。

當我們部署應用程序時,我們會收到以下錯誤消息:

解析器錯誤消息:基類包含欄位“frame”,但其類型(System.Web.UI.HtmlControls.HtmlIframe)與控制項類型(System.Web.UI.HtmlControls.HtmlGenericControl)不兼容。**

當我部署舊程式碼時,HtmlGenericControl錯誤消失了,這表明即使我們安裝了 .NET 4.5,伺服器仍在使用舊版本?

我嘗試刪除並重新安裝 .NET,確保向 IIS 註冊 asp。

帶有 IIS 7.5 和 .NET 4.5 的 Windows 2008 R2

我們能夠解決轉換

<iframe id="iframe" runat="server" />

<asp:HtmlIframe id="iframe" runat="server" />

基本問題是 ASP.NET 編譯器(將 ASPX 和 ASCX 文件編譯為 C# 或 VB 程式碼)從 Web 窗體 IFRAME 伺服器控制項生成的對象與 Web 窗體中與該控制項對應的變數類型之間不兼容後面的程式碼。IFRAME 伺服器控制項 ( <iframe id="frame" runat="server" />) 將被解析為特定類型的控制項。在 ASP.NET 4 中,IFRAME 伺服器控制項將是 HtmlGenericControl 控制項。在 ASP.NET 4.5 中,IFRAME 伺服器控制項將是 HtmlIframe 控制項。

通過確保 web.config 文件中編譯元素上的 targetFramework 屬性與項目的 Target Framework 屬性一致並且與 IFRAME 伺服器控制項對應的變數與 ASP.NET 控制項的類型匹配,可以解決此問題編譯器會生成。

已在 Visual Studio 2013 中轉換為 .NET Framework 4.5 的 ASP.NET 4 項目將修改項目的 web.config 文件,以便編譯元素的 targetFramework 屬性的值為“4.5”( <compilation targetFramework="4.5"/>)。這會導致 ASP.NET 編譯器將 IFRAME 伺服器控制項視為 HtmlIframe 控制項。如果控制項變數後面的 Web 窗體程式碼仍然是 HtmlGenericControl,這可能會導致問題。你看到的錯誤是這樣的:

基類包含欄位“frame”,但其類型(System.Web.UI.HtmlControls.HtmlGenericControl)與控制項類型(System.Web.UI.HtmlControls.HtmlIframe)不兼容。

上一個錯誤的解決方法是更新IFRAME伺服器控制項對應的伺服器控制項變數的類型。您可以通過重新保存 Web 窗體 HTML 文件來執行此操作,這將導致重新生成設計器文件。據我所知(至少在 Visual Studio 2013 中)不需要更改控制項 ID。如果伺服器控制變數在程式碼隱藏文件中,則必須手動更新。

如果 web.config 文件中編譯元素的 targetFramework 屬性值為“4.0” ( <compilation targetFramework="4.0"/>),則變數背後的程式碼是 HtmlIframe 的 ASP.NET 4.5 項目​​將遇到類似但不同的問題。這會導致 ASP.NET 編譯器將 IFRAME 伺服器控制項視為 HtmlGenericControl 控制項。你看到的錯誤是這樣的:

基類包含欄位“frame”,但其類型(System.Web.UI.HtmlControls.HtmlIframe)與控制項類型(System.Web.UI.HtmlControls.HtmlGenericControl)不兼容。

修復上一個錯誤的方法是確保 web.config 編譯設置與您項目的 Target Framework 屬性一致。在這種情況下,web.config 中編譯元素的 targetFramework 屬性的值應為“4.5”。

<compilation targetFramework="4.5"/>


注意:將 httpRuntime 元素的 targetFramework 屬性設置為 4.5 也會產生將編譯元素的 targetFramework 屬性設置為 4.5 的效果。有關詳細資訊,請參閱<https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/>。

注2:沒有&lt;asp:HtmlIframe&gt;標籤。將標記前綴“asp”註冊到 System.Web.UI.HtmlControls 命名空間並不是使用 IFRAME 伺服器控制項所必需的。

引用自:https://stackoverflow.com/questions/17809446