在 Visual Studio 2010 和 Visual Studio 2012 中,带有 col、colgroup、tbody 和 thead 的 HTML 表格标记引发编译错误
Posted
技术标签:
【中文标题】在 Visual Studio 2010 和 Visual Studio 2012 中,带有 col、colgroup、tbody 和 thead 的 HTML 表格标记引发编译错误【英文标题】:HTML table tag with col, colgroup, tbody, and thead throws compile error in Visual Studio 2010 and Visual Studio 2012 【发布时间】:2012-09-12 02:15:01 【问题描述】:我有一个 .NET 3.5 网站,其中包含一个 table 标签,其中包含 col、colgroup、tbody 和 thead 标签。这是一个带有 runat="server" 属性的服务器端标签。此表在 Visual Studio 2010 中运行良好,但在我安装 Visual Studio 2012 和 .NET 4.5 后,此标记现在无法在 Visual Studio 2010 和 Visual Studio 2012 中编译。(我都尝试了。)这是编译器错误正在被抛出:
“System.Web.UI.htmlControls.HtmlTableRowCollection.Add(System.Web.UI.HtmlControls.HtmlTableRow)”的最佳重载方法匹配 有一些无效的参数 参数“1”:无法从“System.Web.UI.HtmlControls.HtmlGenericControl”转换为 'System.Web.UI.HtmlControls.HtmlTableRow'
这是我正在使用的示例:
<table id="TestTable" runat="server">
<colgroup>
<col />
<col />
</colgroup>
<thead>
<tr>
<td>Sample header 1</td>
<td>Sample header 2</td>
</tr>
</thead>
<tbody>
<tr>
<td>Sample cell 1</td>
<td>Sample cell 2</td>
</tr>
<tr>
<td>Sample cell 3</td>
<td>Sample cell 4</td>
</tr>
</tbody>
</table>
有谁知道如何解决这个问题,以便我们可以让网站编译并继续工作?
【问题讨论】:
【参考方案1】:这似乎是安装 Visual Studio 2012 和 .NET 4.5 后网站的一个未记录的重大更改。我无法在 Microsoft 记录的 .NET 4.5 更改中找到对此的引用:http://msdn.microsoft.com/en-us/library/hh367887.aspx
在研究问题后,以下似乎是损坏表格标签的可能解决方案。
卸载 Visual Studio 2012 和 .NET 4.5。参考:Server side HTML table with tbody not compiling in ASP.NET 4.5
我意识到这不一定是理想的解决方案,但如果以下其他解决方案都无法轻松实现,您可能会别无选择。此外,仅仅因为这是第一个条目,它不是我推荐的主要解决方案。这只是一种选择。
将您的网站转换为网络应用程序。使用 web 应用程序时,带有 runat="server" 的表似乎是编译文件。
进行这种转换还有其他好处,例如可以更轻松地针对 Web 应用程序中的代码编写单元测试。但是,您需要评估从网站转换为网络应用程序所涉及的工作,并且您需要说服您的老板和同事您需要进行此更改。
检查表的服务器端代码(页面/控件后面的代码)。您是否在服务器端代码中使用控件?如果没有,请删除 runat="server"。然后页面编译就好了。
<table id="TestTable">
<colgroup>
<col />
<col />
</colgroup>
<thead>
<tr>
<td>Sample header 1</td>
<td>Sample header 2</td>
</tr>
</thead>
<tbody>
<tr>
<td>Sample cell 1</td>
<td>Sample cell 2</td>
</tr>
<tr>
<td>Sample cell 3</td>
<td>Sample cell 4</td>
</tr>
</tbody>
</table>
您正在使用服务器端代码中的控件。删除 col 和 colgroup 标签并将列样式移动到表格第一行的 td 或 th 单元格中。 (列宽和样式继承自表格的第一行,因此例如在第一个单元格上设置 会使该列中的所有单元格都具有 。)删除 thead 标记并将表格中的所有 td 单元格更改为 th (表格标题)单元格。移除 tbody 标签。
<table id="TestTable" runat="server">
<tr>
<th >Sample header 1</td>
<th >Sample header 2</td>
</tr>
<tr>
<td>Sample cell 1</td>
<td>Sample cell 2</td>
</tr>
<tr>
<td>Sample cell 3</td>
<td>Sample cell 4</td>
</tr>
</table>
转换为将<asp:Table>
标记与<asp:TableHeaderRow>
和<asp:TableRow>
控件一起使用。参考:How to create thead and tbody in ASP.NET Table?
【讨论】:
我在 2007 年发现了一篇描述这种确切行为的帖子:将colgroup
删除为 table runat="server"
,所以我怀疑它是 .NET 4.5 中的新内容。 link - 见 Steven Cheng 的第二篇文章。【参考方案2】:
现在有一个修补程序可以解决这个烦人的问题: 赢7: http://support.microsoft.com/kb/2750147(见 ASP.net 第 3 期) http://www.microsoft.com/en-gb/download/details.aspx?id=36359
Win8 http://support.microsoft.com/kb/2750149
【讨论】:
“软件更新 KB2750147 安装向导不适用,或被您计算机上的其他情况阻止。”但我仍然看到这个问题:(以上是关于在 Visual Studio 2010 和 Visual Studio 2012 中,带有 col、colgroup、tbody 和 thead 的 HTML 表格标记引发编译错误的主要内容,如果未能解决你的问题,请参考以下文章
有啥建议如何为像 Visual Studio 2010 测试这样的 NUnit 测试部署依赖项吗?
使用带有 fftw3 Visual Studio 2010 的 openCV 的链接器错误
json visual studio vi map esc设置