Подтвердить что ты не робот

HTML-тег таблицы с col, colgroup, tbody и thead выдает ошибку компиляции в Visual Studio 2010 и Visual Studio 2012

У меня есть веб-сайт .NET 3.5 с тегом таблицы, который содержит теги 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>

Кто-нибудь знает, как исправить эту проблему, чтобы мы могли собрать сайт и продолжить работу?

4b9b3361

Ответ 1

Это выглядит как недокументированное нарушение для веб-сайтов после установки Visual Studio 2012 и .NET 4.5. Я не могу найти ссылки на это в изменениях .NET 4.5, задокументированных Microsoft: http://msdn.microsoft.com/en-us/library/hh367887.aspx

После исследования проблемы появляются возможные решения для разбитого тега таблицы.

  • Удалите Visual Studio 2012 и .NET 4.5. Ссылка: Таблица HTML на стороне сервера с tbody, не компилируемым в ASP.NET 4.5

    Я понимаю, что это не обязательно идеальное решение, но если ни одно из других решений, приведенных ниже, не может быть легко реализовано, у вас не будет другого выбора. Кроме того, только потому, что это первая запись, это не то, что я рекомендую в качестве основного решения. Это просто вариант.

  • Преобразуйте свой веб-сайт в веб-приложение. Таблица с runat = "server" появляется для компиляции файла при использовании веб-приложения.

    Для этого преобразования есть дополнительные преимущества, такие как упрощение написания модульных тестов в отношении кода внутри вашего веб-приложения. Тем не менее, вам нужно будет оценить работу, связанную с переходом с веб-сайта на веб-приложение, и вам нужно будет убедить своих боссов и коллег, которые вам нужны, чтобы внести это изменение.

  • Проверьте код сервера (код за страницей/элементом управления) для таблицы. Используете ли вы элемент управления в коде на стороне сервера? Если нет, удалите 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>
    
  • Вы используете элемент управления в коде на стороне сервера. Удалите теги col и colgroup и переместите стили столбцов в td или th ячеек первой строки таблицы. (Ширина и стили столбцов наследуются от первой строки вниз по таблице, поэтому, например, установка ширины = "40%" в первой ячейке, делает все ячейки в этом столбце шириной = "40%".) Удалите тег thead и измените все td-ячейки в таблице на ячейки th (table header). Удалите тег 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>
    
  • Преобразуйте в тег <asp:Table> с помощью элементов управления <asp:TableHeaderRow> и <asp:TableRow>. Ссылка: Как создать thead и tbody в таблице ASP.NET?