基本問題是由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,則會導致問題。您看到的錯誤是這樣的:
基類包含字段「框架」,但其類型(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的效果。有關更多信息,請參閱http://blogs.msdn.com/b/webdev/archive/2012/11/19/all-about-httpruntime-targetframework.aspx。
注2:沒有<asp:HtmlIframe>
標籤。將標記前綴「asp」註冊到System.Web.UI.HtmlControls命名空間不是使用IFRAME服務器控件所必需的。
答案沒有提到你必須添加命名空間'System.Web.UI.HtmlControls'到Web.config。 (請參閱Panoj以獲得完整答案)。 –
或者在特定的aspx文件中添加命名空間。 –