jquery datatables: числовой тип сортировки не работает

У меня есть datatable примерно с 20 столбцами. У меня есть столбец серийного номера, который состоит из полностью числовых значений и определяется как int в базе данных. Я потратил так много времени, пытаясь понять, почему это не работает, но до сих пор не знаю. Я пробовал использовать sType='numeric' , type='num', num-html,num-fmt... ничего не работает. Я либо получаю сортировку следующим образом:

1
1
10
100

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

<table id="myTable">
    <thead>
        <tr>
            <th>Col1</th>
            <th>Col2</th>
            <th>Col3</th>
            <th>Col4</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td title="Del">
                    Data1
                </td>
                <td>
                    <div>
                        <div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
                            @Html.ActionLink("Edit", "Edit", new { id = item.Id })
                            @Html.ActionLink("Details", "Details")
                            @Html.ActionLink("Delete", "Delete")
                        </div>
                    </div>
                </td>
                <td>
                    Data2
                </td>
                <td>
                    &nbsp;@Html.DisplayFor(modelItem => item.Serial)
                </td>
            </tr>
        }
</table>

Следующее из моего Layout.cshtml:

var table = $('#myTable').DataTable({
                    "lengthMenu": [[100, 200, 300, 500, -1], [100, 200, 300, 500, "All"]],
                    fixedHeader: true,
                    // "bFilter": false, to turn off search
                    fixedColumns: {
                        heightMatch: 'none'
                    },
                    colReorder: true,
                    stateSave: true,
                    "aoColumnDefs": [
                        { "sType": "numeric", "aTargets": [3] },
                        { "bSortable": false, "aTargets": [0] },
                        { "bSearchable": false, "aTargets": [0] }
                    ]
                });

person user7221204    schedule 05.04.2018    source источник
comment
вы возвращаете весь набор данных или только записи по страницам?   -  person Antonio Avndaño Duran    schedule 05.04.2018
comment
Закрывающая скобка в разделе foreach находится не в том месте.   -  person Michael    schedule 05.04.2018
comment
@AntonioAvndañoDuran: весь набор данных   -  person user7221204    schedule 05.04.2018
comment
@Michael: здесь была опечатка. В моем приложении он находится в нужном месте.   -  person user7221204    schedule 05.04.2018
comment
Почему вы возвращаете весь набор данных? используйте таблицу данных jquery с ajax, чтобы возвращать только записи на страницу. datatables.net/examples/data_sources/ajax.html   -  person Antonio Avndaño Duran    schedule 06.04.2018


Ответы (1)


Похоже, вы используете библиотеку jquery datatables. Согласно документам, существует информация о столбце сортировки по умолчанию, которую вы можете предоставить при инициализации таблицы:

https://datatables.net/examples/basic_init/table_sorting.html

$(document).ready(function() {
    $('#example').DataTable( {
        "order": [[ 3, "asc" ]]
    } );
} );

Изменить. Возможно, другие функции или свойства, используемые в библиотеке javascript, нарушают сортировку. В общем, при устранении проблем такого типа я бы рекомендовал удалить все свойства, кроме того, которое вы используете (порядок). Затем вы можете повторно добавить свойства, чтобы увидеть, не нарушает ли что-то функциональность.

Итак, в вашем коде:

var table = $('#myTable').DataTable({
        "lengthMenu": [[100, 200, 300, 500, -1], [100, 200, 300, 500, "All"]],
        fixedHeader: true,
        // "bFilter": false, to turn off search
        fixedColumns: {
            heightMatch: 'none'
        },
        colReorder: true,
        "order": [[ 3, "asc" ]],
        "aoColumnDefs": [
            { "sType": "numeric", "aTargets": [3] },
            { "bSortable": false, "aTargets": [0] },
            { "bSearchable": false, "aTargets": [0] }
        ]
});

Кроме того, не уверен, повлияет ли этот неразрывный пробел на значение серийного идентификатора в html. Я бы удалил его и попытался добиться интервала через css для элемента td:

<td style="padding-left:8px">
    @Html.DisplayFor(modelItem => item.Serial)
</td>
person Ehz    schedule 05.04.2018
comment
Я уже пробовал заказ, и он не работал. Я попробовал ваше предложение удалить, но это не помогло :( - person user7221204; 06.04.2018
comment
Обнаружена еще одна проблема с использованием свойства stateSave. - person Ehz; 06.04.2018