Asp.net

在 Visual Studio 2010 和 Visual Studio 2012 中,帶有 col、colgroup、tbody 和 thead 的 HTML 表格標記引發編譯錯誤

  • November 13, 2013

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

有誰知道如何解決這個問題,以便我們可以讓網站編譯並繼續工作?

在安裝 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>
  1. 您正在使用伺服器端程式碼中的控制項。刪除 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>
  1. 轉換為將<asp:Table>標籤與<asp:TableHeaderRow><asp:TableRow>控制項一起使用。參考: 如何在 ASP.NET Table 中創建 thead 和 tbody?

引用自:https://stackoverflow.com/questions/12500332