12

Tengo un sitio web .NET 3.5 con una etiqueta de tabla que contiene etiquetas col, colgroup, tbody y thead. Esta es una etiqueta del lado del servidor con el atributo runat = "server". Esta tabla funcionaba bien en Visual Studio 2010, pero después de instalar Visual Studio 2012 y .NET 4.5, ahora esta etiqueta no se compila en Visual Studio 2010 y en Visual Studio 2012. (Intenté ambas). Aquí están los errores del compilador que están siendo lanzados:etiqueta de tabla HTML con col, colgroup, tbody y thead arroja error de compilación en Visual Studio 2010 y Visual Studio 2012

  • El partido mejor método sobrecargado para 'System.Web.UI.HtmlControls.HtmlTableRowCollection.Add (System.Web.UI.HtmlControls.HtmlTableRow)' tiene algunos argumentos no válidos
  • Argumento '1': no ​​se puede convertir de 'System.Web.UI.HtmlControls.HtmlGenericControl' a 'System.Web.UI.HtmlControls.HtmlTableRow'

He aquí un ejemplo de lo que estoy trabajando 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> 

¿Alguien sabe cómo solucionar este problema, por lo que podemos conseguir el sitio para compilar y seguir trabajando?

Respuesta

9

Esto parece ser un cambio no documentado para sitios web después de la instalación de Visual Studio 2012 y .NET 4.5. No puedo encontrar referencias a esto en los cambios de .NET 4.5 documentados por Microsoft: http://msdn.microsoft.com/en-us/library/hh367887.aspx

Después de investigar el problema, las siguientes parecen ser posibles soluciones a la etiqueta de tabla rota.

  1. Desinstalar Visual Studio 2012 y .NET 4.5. Referencia: Server side HTML table with tbody not compiling in ASP.NET 4.5

    Me doy cuenta de que esta no es necesariamente una solución ideal, pero si ninguna de las otras soluciones a continuación puede implementarse fácilmente, puede que no tenga otra opción. Además, solo porque esta es la primera entrada, no es lo que estoy recomendando como la solución principal. Es solo una opción.

  2. Convierta su sitio web en una aplicación web. La tabla con runat = "servidor" parece compilar un archivo cuando se usa una aplicación web.

    Esta conversión tiene beneficios adicionales, por ejemplo, facilita la tarea de escribir pruebas de unidades contra el código dentro de su aplicación web. Sin embargo, deberá evaluar el trabajo relacionado con la conversión de un sitio web a una aplicación web, y deberá convencer a sus jefes y compañeros de trabajo de que debe realizar este cambio.

  3. Compruebe el código del lado del servidor (código detrás de la página/control) para la tabla. ¿Estás usando el control en el código del lado del servidor? Si no, elimine runat = "server". La página luego compila muy bien.

    <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. Está utilizando el control en el código del lado del servidor. Quite las etiquetas col y colgroup y mueva los estilos de columna en las celdas td o th de la primera fila de la tabla. (El ancho de columna y los estilos heredan de la primera fila de la tabla, por lo que establecer width = "40%" en la primera celda, por ejemplo, hace que todas las celdas de esa columna tengan width = "40%"). Quite la etiqueta thead y cambie todas las celdas td en la tabla a las celdas th (encabezado de tabla). Retire la etiqueta 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. Convertir a usar la etiqueta <asp:Table> con <asp:TableHeaderRow> y <asp:TableRow> controles. Referencia: How to create thead and tbody in ASP.NET Table?

+0

He encontrado una publicación de 2007 que describe este comportamiento exacto: descartar 'colgroup' para' table runat = "server" ', así que dudo que sea nuevo en .NET 4.5. [link] (http://www.pcreview.co.uk/forums/colgroup-table-element-gets-lost-table-element-made-visible-invisible-t3192851.html) - ver la segunda publicación de Steven Cheng. –

Cuestiones relacionadas