我有一个.NET 3.5网站,其中包含col,colgroup,tbody和thead标签.这是具有runat =“server”属性的服务器端标签.该表在Visual Studio 2010中正常工作,但在安装Visual Studio 2012和.NET 4.5之后,此标记现在无法在Visual Studio 2010和Visual Studio 2012中进行编译(我同时尝试过).以下是编译器错误被抛出:
以下是我正在使用的例子:
<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:
http://msdn.microsoft.com/en-us/library/hh367887.aspx记录的.NET 4.5更改中,我无法找到对此的引用
>卸载Visual Studio 2012和.NET 4.5.参考:Server side HTML table with tbody not compiling in ASP.NET 4.5
我意识到这不一定是一个理想的解决方案,但是如果下面的其他解决方案都不能轻易实现,那么你可能没有别的选择.另外,只是因为这是第一个条目,这不是我推荐的主要解决方案.这只是一个选择.
>将您的网站转换为Web应用程序.在使用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?