在 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>
    

    转换为将&lt;asp:Table&gt; 标记与&lt;asp:TableHeaderRow&gt;&lt;asp:TableRow&gt; 控件一起使用。参考: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设置

visual studio2010 c++头文件怎么写

为啥我在尝试使用 Visual Studio Analyzer 时遇到错误?

Visual Studio 2010 项目到 Visual Studio 2012