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

问题描述:

我有一个带有包含col,colgroup,tbody和thead标签的表标签的.NET 3.5网站。这是一个具有runat =“server”属性的服务器端标记。此表在Visual Studio 2010中工作正常,但是在安装Visual Studio 2012和.NET 4.5后,此标记现在无法在Visual Studio 2010和Visual Studio 2012中进行编译。(我尝试了这两种方法。)以下是编译器错误被抛出:带col,colgroup,tbody和thead的HTML表标签在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> 

有谁知道如何解决这个问题,这样我们就可以得到网站编辑和继续工作?

这似乎是在安装Visual Studio 2012和.NET 4.5之后的网站上未公开的重大更改。我无法在Microsoft 4.5中记录的.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?

+0

我已经找到了2007年后描述了这个确切的行为:为'table runat =“server”'删除'colgroup',所以我怀疑它是.NET 4.5中的新增功能。 [链接](http://www.pcreview.co.uk/forums/colgroup-table-element-gets-lost-table-element-made-visible-invisible-t3192851.html) - 见史蒂文程的第二篇文章。 –

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

+0

“软件更新KB2750147安装向导不适用于您的计算机上的另一个条件,或被其他条件阻止。”但我仍然看到这个问题:( –