12

Mam .NET 3.5 witrynę internetową z tagiem tabeli zawierającej COL COLGROUP, tbody i THEAD tagi. Jest to tag po stronie serwera z atrybutem runat = "server". Ta tabela działała poprawnie w Visual Studio 2010, ale po zainstalowaniu Visual Studio 2012 i .NET 4.5, ten znacznik teraz nie kompiluje się w Visual Studio 2010 i Visual Studio 2012. (Próbowałem obu.) Oto błędy kompilatora, które są wyrzucane:HTML tag stół z COL COLGROUP, tbody i thead wyrzuca błąd kompilacji w Visual Studio 2010 i Visual Studio 2012

  • najlepszym przeciążona metoda mecz dla 'System.Web.UI.HtmlControls.HtmlTableRowCollection.Add (System.Web.UI.HtmlControls.HtmlTableRow)' ma pewne nieprawidłowe argumenty
  • Argument '1': nie można przekonwertować z 'System.Web.UI.HtmlControls.HtmlGenericControl' do 'System.Web.UI.HtmlControls.HtmlTableRow'

Oto przykład tego, co pracuję z:

<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> 

Czy ktoś wie jak rozwiązać ten problem, tak, że możemy dostać miejsce do kompilowania i nadal działa?

Odpowiedz

9

To wydaje się być nieudokumentowaną zmianą łamania dla witryn sieci Web po instalacji programów Visual Studio 2012 i .NET 4.5. Nie mogę znaleźć odnośników do tego w zmianach .NET 4.5 udokumentowanych przez Microsoft: http://msdn.microsoft.com/en-us/library/hh367887.aspx

Po zbadaniu problemu, poniższe wydają się być możliwymi rozwiązaniami dla uszkodzonego znacznika tabeli.

  1. Odinstaluj programy Visual Studio 2012 i .NET 4.5. Odniesienie: Server side HTML table with tbody not compiling in ASP.NET 4.5

    Zdaję sobie sprawę, że niekoniecznie jest to idealne rozwiązanie, ale jeśli żadne z poniższych rozwiązań nie zostanie wdrożone w prosty sposób, może się okazać, że nie ma innego wyjścia. Ponadto, ponieważ jest to pierwszy wpis, nie jest to, co zalecam jako podstawowe rozwiązanie. To tylko opcja.

  2. Przekształć swoją witrynę internetową w aplikację internetową. Tabela z runat = "serwer" wydaje się kompilować plik podczas korzystania z aplikacji internetowej.

    Są to dodatkowe korzyści wynikające z tej konwersji, takie jak łatwiejsze zapisywanie testów jednostkowych względem kodu w aplikacji internetowej. Będziesz jednak musiał ocenić pracę związaną z konwersją z witryny internetowej na aplikację internetową, a będziesz musiał przekonać swoich szefów i współpracowników, że musisz dokonać tej zmiany.

  3. Sprawdź kod po stronie serwera (kod za stroną/kontrolą) dla tabeli. Czy używasz kontrolki w kodzie strony serwera? Jeśli nie, usuń runat = "server". Strona następnie kompiluje się dobrze.

    <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. Używasz kontrolę kodu po stronie serwera. Usuń znaczniki col i colgroup i przenieś stylizacje kolumn do komórek td lub th pierwszego wiersza tabeli. (Szerokość kolumny i style dziedziczą od pierwszego wiersza w dół tabeli, więc ustawienie width = "40%" na pierwszej komórce, na przykład, powoduje, że wszystkie komórki w tej kolumnie mają szerokość = "40%".) Usuń znacznik thead i zmień wszystkie komórki td w tabeli na th (nagłówek tabeli). Usuń tag 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. Convert to za pomocą znacznika <asp:Table> z <asp:TableHeaderRow> i <asp:TableRow> kontroli. Numer referencyjny: How to create thead and tbody in ASP.NET Table?

+0

Znalazłem post z roku 2007 opisujący to dokładne zachowanie: zrzucenie 'colgroup' dla' table runat = "server" ', więc wątpię, czy jest to nowość w .NET 4.5. [link] (http://www.pcreview.co.uk/forums/colgroup-table-element-gets-lost-table-element-made-visible-invisible-t3192851.html) - zobacz drugi post Steven Cheng. –