Iframe解析器错误(HtmlIframe / HtmlGenericControl),但仍使用.NET 4.0(而不是.NET 4.5)。

13

这是我的错误消息

解析器错误消息: 基类包含字段“iframeShim”,但其类型(System.Web.UI.HtmlControls.HtmlGenericControl)与控件的类型(System.Web.UI.HtmlControls.HtmlIframe)不兼容。

源错误:

Line 180:    <iframe runat="server" id="iframeShim" frameborder="0" scrolling="no" style="position: absolute;
Line 181:        display: block; z-index: 990; z-index: 990" src="~/blank.html"></iframe>

我正在使用.NET 4.0。

版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.34249

设计师代码如下:

protected global::System.Web.UI.HtmlControls.HtmlGenericControl iframeShim;

我所做的搜索表明,当您升级到.NET 4.5并且服务器端变量的类型没有被正确更新(需要是HtmlIframe,而不是HtmlGenericControl)时,通常会出现此错误。此外,那些搜索结果中的解析器错误消息略有不同(在运行4.5时有意义)——他们的消息为:

...但它的类型(System.Web.UI.HtmlControls.HtmlIframe)与控件的类型(System.Web.UI.HtmlControls.HtmlGenericControl)不兼容。

我的web.config中的targetFramework是:

<compilation targetFramework="4.0">

所以,我不太确定这里发生了什么。有什么想法吗?请注意,我已经安装了VS2012,并最近不得不回到VS2010项目中做一些工作,然后这种情况开始发生。我立刻认为这是一个.NET版本问题,但在这个VS2010项目中所有东西仍然显示我正在使用.NET 4.0。


这个回答解决了你的问题吗?升级到.NET 4.5后,出现iFrame解析器错误 - Alex
3个回答

24

另一个人遇到了和我一样的问题,并在这篇帖子中得以解决:https://dev59.com/lWMm5IYBdhLWcg3wKsrO#21707234

基本上,确保你的 compilation targetFramework 设置为 4.6.1(或者你使用的任何版本),然后进入引发错误的 ASPX/ASCX 文件并保存它。保存操作将重新创建具有适当类型的设计器文件。

在我的情况下,它从以下内容更改:

System.Web.UI.HtmlControls.HtmlGenericControl

至:

System.Web.UI.HtmlControls.HtmlIframe

对于未来的读者,我强烈建议查看此答案链接到的其他答案,它很好地描述了这个问题。 - Alex
谢谢,将.NET 4.5.2升级到4.6解决了我的问题。 - Dima Shivrin

1
在ASCX文件中进行“愚蠢”的更改,例如插入空行,然后保存 - 这样做非常有效。在此基础上,所有的HtmlGenericControl实例都会变成HtmlIframe,问题就得到了解决。
如果这不是一个选项,那么在web.config编译标记中将targetFramework设置为“4.0”是最后的办法。

0
在我的情况下,我的本地主机能够正常运行代码,但设计文件中正确定义了HtmlIFrame。然而,在我的暂存服务器上,代码报错,显示相同的错误信息:“但它的类型(System.Web.UI.HtmlControls.HtmlGenericControl)与控件的类型(System.Web.UI.HtmlControls.HtmlIframe)不兼容。”
在我特定的情况下,我的web.config中的本地编译标签设置为4.7.2,以匹配我的项目设置中正在运行的框架。
然而,我的暂存Web服务器可能是很久以前设置的,targetFramework="4.0"。将服务器的web.config文件更改为4.7.2解决了我的问题。在旧版本的4.0框架中,似乎有一种不同的处理该特定元素的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接