带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
在研究了该问题后,以下解决方案似乎是破碎表标记的可能解决方案。
-
卸载Visual Studio 2012和.NET 4.5。参考:Server side HTML table with tbody not compiling in ASP.NET 4.5
我意识到这不一定是一个理想的解决方案,但如果以下其他解决方案都不能轻松实现,那么您最终可能没有其他选择。另外,仅仅因为这是第一个入口,这不是我所推荐的主要解决方案。这只是一个选项。
-
将您的网站转换为网络应用程序。使用web应用程序时,runat =“server”的表似乎会编译文件。
进行此转换还有其他好处,例如,可以更轻松地针对Web应用程序中的代码编写单元测试。但是,您需要评估从网站转换为Web应用程序所涉及的工作,并且您需要说服您的老板和其他同事需要进行此更改。
-
检查表格的服务器端代码(页面/控件背后的代码)。你在服务器端代码中使用控件吗?如果没有,请删除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>
-
您正在服务器端代码中使用该控件。删除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>
转换为使用
<asp:Table>
标签与<asp:TableHeaderRow>
和<asp:TableRow>
控制。参考:How to create thead and tbody in ASP.NET Table?
现在有一个修补程序来解决这个恼人的问题: Win7的: http://support.microsoft.com/kb/2750147(见ASP.net第3期) http://www.microsoft.com/en-gb/download/details.aspx?id=36359
“软件更新KB2750147安装向导不适用于您的计算机上的另一个条件,或被其他条件阻止。”但我仍然看到这个问题:( –
我已经找到了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) - 见史蒂文程的第二篇文章。 –