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

时间:2012-09-19 18:01:01

标签: asp.net visual-studio-2010 .net-3.5 visual-studio-2012 .net-4.5

我有一个.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>

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

2 个答案:

答案 0 :(得分:9)

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

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

  1. 卸载Visual Studio 2012和.NET 4.5。参考:Server side HTML table with tbody not compiling in ASP.NET 4.5

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

  2. 将您的网站转换为网络应用程序。当使用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>
    
  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>
    
  5. 转换为使用带有<asp:Table><asp:TableHeaderRow>控件的<asp:TableRow>标记。参考:How to create thead and tbody in ASP.NET Table?

答案 1 :(得分:4)

现在有一个修补程序来解决这个烦人的问题: Win7的: 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