12

Ho un sito web NET 3.5 con un tag tabella che contiene col, colgroup, tbody e tag thead. Questo è un tag lato server con l'attributo runat = "server". Questa tabella stava lavorando bene in Visual Studio 2010, ma dopo che ho installato Visual Studio 2012 e .NET 4.5, questo tag ora non riesce a compilare in Visual Studio 2010 e Visual Studio 2012. (ho provato entrambe le cose.) Qui sono gli errori del compilatore che vengono gettati:HTML con col, colgroup, tbody, e thead getta errore di compilazione in Visual Studio 2010 e Visual Studio 2012

  • La partita metodo migliore overload per 'System.Web.UI.HtmlControls.HtmlTableRowCollection.Add (System.Web.UI.HtmlControls.HtmlTableRow)' ha alcuni argomenti non validi
  • Argomento '1': impossibile convertire da 'System.Web.UI.HtmlControls.HtmlGenericControl' a 'System.Web.UI.HtmlControls.HtmlTableRow'

Ecco un esempio di quello che sto lavorando con:

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

Qualcuno sa come risolvere questo problema, in modo da poter ottenere il sito per compilare e continuare a lavorare?

risposta

9

Questo sembra essere un cambiamento di rottura non documentato per i siti web dopo l'installazione di Visual Studio 2012 e .NET 4.5. Non riesco a trovare riferimenti a questo in .NET 4.5 modifiche documentate da Microsoft: http://msdn.microsoft.com/en-us/library/hh367887.aspx

Dopo aver esaminato il problema, le seguenti sembrano essere possibili soluzioni al tag del banco rotto.

  1. Disinstallare Visual Studio 2012 e .NET 4.5. Riferimento: Server side HTML table with tbody not compiling in ASP.NET 4.5

    Mi rendo conto che questa non è necessariamente una soluzione ideale, ma se nessuna delle altre soluzioni di seguito può essere implementata facilmente, non ci si può trovare altra scelta. Inoltre, solo perché questa è la prima voce, non è quello che sto raccomandando come soluzione primaria. È solo un'opzione.

  2. convertire il vostro sito web in un'applicazione web. La tabella con runat = "server" sembra compilare il file quando si utilizza un'applicazione web.

    Ci sono ulteriori vantaggi a questa conversione, come rendere più facile scrivere test di unità sul codice all'interno dell'applicazione web. Tuttavia, sarà necessario valutare il lavoro necessario per la conversione da un sito Web a un'applicazione Web e sarà necessario convincere i propri capi e colleghi di lavoro che è necessario apportare questa modifica.

  3. Controllare il codice lato server (codice dietro pagina/controllo) per la tabella. Stai usando il controllo nel codice lato server? In caso contrario, rimuovere runat = "server". La pagina quindi viene compilata correttamente.

    <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. Si utilizza il controllo nel codice lato server. Rimuovere i tag col e COLGROUP e spostare allo stile di colonna nella td o th celle della prima riga della tabella. (Larghezza della colonna e stili ereditano dalla prima riga in basso nella tabella, quindi l'impostazione width = "40%" sulla prima cella, ad esempio, fa sì che tutte le celle di quella colonna abbiano larghezza = "40%".) Rimuovi il tag thead e cambia tutte le celle td nella tabella alle celle th (intestazione della tabella). Rimuovi il 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. Converti usando il tag <asp:Table> con <asp:TableHeaderRow> e <asp:TableRow> controlli. Riferimento: How to create thead and tbody in ASP.NET Table?

+0

ho trovato un post datato 2007 che descrive questo comportamento esatto: lasciando cadere 'colgroup' per' table runat = "server" ', quindi dubito che sia nuovo in .NET 4.5. [link] (http://www.pcreview.co.uk/forums/colgroup-table-element-gets-lost-table-element-made-visible-invisible-t3192851.html) - vedi il secondo post di Steven Cheng. –