【问题标题】:HTML table tag with col, colgroup, tbody, and thead throws compile error in Visual Studio 2010 and Visual Studio 2012在 Visual Studio 2010 和 Visual Studio 2012 中,带有 col、colgroup、tbody 和 thead 的 HTML 表格标记引发编译错误
【发布时间】:2012-09-12 02:15:01
【问题描述】:

我有一个 .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>

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

【问题讨论】:

    标签: asp.net visual-studio-2010 .net-3.5 visual-studio-2012 .net-4.5


    【解决方案1】:

    这似乎是安装 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。参考:Server side HTML table with tbody not compiling in ASP.NET 4.5

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

    2. 将您的网站转换为网络应用程序。使用 web 应用程序时,带有 runat="server" 的表似乎是编译文件。

      进行这种转换还有其他好处,例如可以更轻松地针对 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. 转换为将&lt;asp:Table&gt; 标记与&lt;asp:TableHeaderRow&gt;&lt;asp:TableRow&gt; 控件一起使用。参考:How to create thead and tbody in ASP.NET Table?

    【讨论】:

    • 我在 2007 年发现了一篇描述这种确切行为的帖子:将 colgroup 删除为 table runat="server",所以我怀疑它是 .NET 4.5 中的新内容。 link - 见 Steven Cheng 的第二篇文章。
    【解决方案2】:

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

    【讨论】:

    • “软件更新 KB2750147 安装向导不适用,或被您计算机上的其他情况阻止。”但我仍然看到这个问题:(
    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多