带有col,colgroup,tbody和thead的HTML表标记会在Visual Studio 2010和Visual Studio 2012中引发编译错误

Jef*_*eff 12 asp.net visual-studio-2010 .net-3.5 .net-4.5 visual-studio-2012

我有一个.NET 3.5网站,其中包含一个包含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 width="30%" />
        <col width="70%" />
    </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>
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题,以便我们可以让网站编译并继续工作?

Jef*_*eff 9

在安装Visual Studio 2012和.NET 4.5之后,这似乎是对网站的无证件更改.我无法找到在微软记录的.NET 4.5更改此引用: http://msdn.microsoft.com/en-us/library/hh367887.aspx

在研究问题之后,以下似乎是破碎表标签的可能解决方案.

  1. 卸载Visual Studio 2012和.NET 4.5.参考:服务器端HTML表,其中tbody未在ASP.NET 4.5中编译

    我意识到这不一定是理想的解决方案,但如果下面的其他解决方案都不能轻易实现,那么您可能最终别无选择.另外,仅仅因为这是第一个条目,它不是我推荐的主要解决方案.这只是一个选择.

  2. 将您的网站转换为Web应用程序.使用Web应用程序时,runat ="server"的表似乎是编译文件.

    执行此转换还有其他好处,例如,可以更轻松地针对Web应用程序中的代码编写单元测试.但是,您需要评估从网站转换为Web应用程序所涉及的工作,并且您需要说服您的老板和同事,您需要进行此更改.

  3. 检查表的服务器端代码(页面/控件后面的代码).你在服务器端代码中使用控件吗?如果没有,请删除runat ="server".然后页面编译得很好.

    <table id="TestTable">
        <colgroup>
            <col width="30%" />
            <col width="70%" />
        </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>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 您正在服务器端代码中使用该控件.删除col和colgroup标签并将列样式移动到表格第一行的td或th单元格中.(列宽和样式从表格的第一行继承,因此在第一个单元格上设置width ="40%",例如,使该列中的所有单元格都具有width ="40%".)删除thead标记,将表中的所有td单元格更改为th(​​表格标题)单元格.删除tbody标签.

    <table id="TestTable" runat="server">
        <tr>
            <th width="30%">Sample header 1</td>
            <th width="70%">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>
    
    Run Code Online (Sandbox Code Playgroud)
  5. 转换为使用<asp:Table>标签<asp:TableHeaderRow><asp:TableRow>控件.参考: 如何在ASP.NET表中创建thead和tbody?