12

我有一个 .NET 3.5 网站,其中包含一个 table 标签,其中包含 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>

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

4

2 回答 2

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。参考:在 ASP.NET 4.5 中未编译 tbody 的服务器端 HTML 表

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

  2. 将您的网站转换为 Web 应用程序。使用 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>控件一起使用。参考: 如何在 ASP.NET Table 中创建 thead 和 tbody?

于 2012-09-19T18:04:30.813 回答
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

于 2013-04-11T20:51:40.967 回答