我有一个.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>
有谁知道如何解决这个问题,以便我们可以让网站编译并继续工作?
答案 0 :(得分:9)
这似乎是在安装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应用程序中的代码编写单元测试。但是,您需要评估从网站转换为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?
答案 1 :(得分:4)
现在有一个修补程序来解决这个烦人的问题: Win7的: http://support.microsoft.com/kb/2750147(参见ASP.net第3期) http://www.microsoft.com/en-gb/download/details.aspx?id=36359