ASP.net WebGrid генерирует Tfoot после Tbody в HTML - PullRequest
0 голосов
/ 11 января 2019

У меня есть старое приложение, которое я выбрал, и у меня есть требование пройти проверку html5 и тесты WCAG2.0 AA. Я столкнулся с проблемой с System.Web.Helpers.Webgrid и таблицей, которую он генерирует, когда элемент tfoot генерируется перед элементом tbody, что приводит к сбою проверки. Очевидно, что это было хорошо много лет назад, но с новыми правилами валидации больше не разрешено иметь tfoot впереди tbody.

Есть ли способ заставить webgrid генерировать элемент tfoot после элемента tbody или какой-то простой обходной путь? Простое отключение нижнего колонтитула (без подкачки страниц) не вариант, так как иногда возвращаемые данные будут иметь сотни строк.

Код для создания таблицы:

var grid = new WebGrid(source: Model.Stuff,
                       defaultSort: "Stamp",
                       rowsPerPage: 20,
                       fieldNamePrefix: "wg_",
                       canPage: true,
                       canSort: true,
                       pageFieldName: "pg");
<text>
@grid.GetHtml(tableStyle: "gridtable",
                headerStyle: "gridtableheading",
                rowStyle: "gridtablerow",
                alternatingRowStyle: "gridtablerowalternate",
                columns:
                    grid.Columns(
                                grid.Column("View", format: (item) => (Html.ActionLink("Select", "View", "Item", new { itemID = item.ID }, null)), style: "padtable centeralign"),
                                grid.Column("ID", "ID", style: "padtable rightalign"),
                                grid.Column("CreatedDate", "Stamp", format: (item) => String.Format("{0:MM/dd/yyyy hh:mm tt}", item.CreatedDate), style: "padtable leftalign"),
                                grid.Column("Type", "Type", style: "padtable rightalign"),
                                grid.Column("Status", "Status", style: "padtable leftalign"),
                     ), mode: WebGridPagerModes.Numeric)
</text>

Вот обобщенная версия того, что на самом деле генерирует

<!DOCTYPE html>
<html lang="en-US">
<head>
  <title>Table Test</title>
</head>
<body>
  <table>
    <thead>
      <tr>
        <td>header1</td>
        <td>header2</td>
      </tr>
    </thead>
    <tfoot>
      <tr>
        <td>Previous page link</td>
        <td>Next page link</td>
      </tr>
    </tfoot>
    <tbody>
      <tr>
        <td>table row1 data 1</td>
        <td>table row1 data 2</td>
      </tr>
      <tr>
        <td>table row2 data 1</td>
        <td>table row2 data 2</td>
      </tr>
    </tbody>
  </table>
</body>

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Я не смог найти способ сделать это автоматически, однако идея настройки нижнего колонтитула, упомянутая slugolicious, заставила меня понять, что, скорее всего, было проще редактировать HTML для перемещения нижнего колонтитула.

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

string TableHTML = grid.GetHtml(tableStyle: "gridtable",
            headerStyle: "gridtableheading",
            rowStyle: "gridtablerow",
            alternatingRowStyle: "gridtablerowalternate",
            columns:
                grid.Columns(
                            grid.Column("View", format: (item) => (Html.ActionLink("Select", "View", "Item", new { itemID = item.ID }, null)), style: "padtable centeralign"),
                            grid.Column("ID", "ID", style: "padtable rightalign"),
                            grid.Column("CreatedDate", "Stamp", format: (item) => String.Format("{0:MM/dd/yyyy hh:mm tt}", item.CreatedDate), style: "padtable leftalign"),
                            grid.Column("Type", "Type", style: "padtable rightalign"),
                            grid.Column("Status", "Status", style: "padtable leftalign"),
                 ), mode: WebGridPagerModes.Numeric).ToHtmlString();


string TableFooter = TableHTML.Substring(TableHTML.IndexOf("<tfoot>"),TableHTML.IndexOf("</tfoot>") + 8 - TableHTML.IndexOf("<tfoot>")); //Grab the HTML for the footer
string NewTable = TableHTML.Substring(0, TableHTML.IndexOf("<tfoot>")); //Take the HTML up until the footer
NewTable += TableHTML.Substring(TableHTML.IndexOf("</tfoot>") + 8).Replace("</table>","");  //Omit the footer, grab the rest of the HTML, remove the closing tag
NewTable += TableFooter; //Reinsert the footer at the end
NewTable += "</table>"; //Add the closing tag

<text>
    @(new HtmlString(NewTable))
</text>
0 голосов
/ 12 января 2019

Ответ на вопросы ASP.NET GridView Newbie о TFOOT и TH показывает

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