#asp.net #asp.net-mvc #tablesorter
#asp.net #asp.net-mvc #tablesorter
Вопрос:
Я впервые публикую здесь вопрос, поэтому я постараюсь быть подробным, чтобы у вас была вся необходимая информация.
Я пытаюсь использовать tablesorter для сортировки моей таблицы. Вот код, о котором идет речь:
@model MyAspApp.Models.Jackets
@{
ViewBag.Title = "Index";
}
<h2>Roster</h2>
<head>
<meta name="viewport" content="width=device-width" />
<title>Multi-model view attempt</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="~/Content/theme.default.css">
<link rel="stylesheet" href="~/Content/jquery-ui.min.css">
<script type="text/javascript" src="~/Scripts/jquery-latest.min.js"></script>
<script src="~/Scripts/jquery-ui.js"></script>
<script src="~/Scripts/jquery-ui.min.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.tablesorter.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.tablesorter.widgets.js"></script>
</head>
@section scripts
{
@Scripts.Render("~/bundles/jquery.tablesorter")
<script type="text/javascript">
$(document).ready(function () {
$("#Skaters").tablesorter(getSkaters());
$("#Goalies").tablesorter(getGoalies());
});
</script>
}
<script>
function getSkaters() {
var allSkaters = @Html.Raw(Json.Encode(ViewBag.Skaters));
for (var i = 0; i < allSkaters.length; i ) {
$("#Skaters").append(
"<tbody><tr><td >" allSkaters[i].First_Name "</td>"
"<td>" allSkaters[i].Last_Name "</td>"
"<td>" allSkaters[i].Number "</td>"
"<td>" allSkaters[i].Position "</td>"
"<td>" allSkaters[i].Goals "</td>"
"<td>" allSkaters[i].Assists "</td>"
"<td>" allSkaters[i].Points "</td></tr></tbody>");
}
}
function getGoalies(){
var allGoalies = @Html.Raw(Json.Encode(ViewBag.Goalies));
for (var i = 0; i < allGoalies.length; i ){
$("#Goalies").append(
"<tbody><tr><td>" allGoalies[i].First_Name "</td>"
"<td>" allGoalies[i].Last_Name "</td>"
"<td>" allGoalies[i].Number "</td>"
"<td>" allGoalies[i].Wins "</td>"
"<td>" allGoalies[i].Losses "</td>"
"<td>" allGoalies[i].OTL "</td>"
"<td>" allGoalies[i].Save_ "</td>"
"<td>" allGoalies[i].GAA "</td> </tr></tbody>");
}
}
</script>
<body>
<h1>Skaters</h1>
<table id="Skaters" class="tablesorter">
<thead>
<tr>
<th> First Name </th>
<th> Last Name </th>
<th> Number </th>
<th> Position </th>
<th> Goals </th>
<th> Assists </th>
<th> Points </th>
</tr>
</thead>
</table>
<h2>Goalies</h2>
<table id="Goalies" class="tablesorter">
<thead>
<tr>
<th> First Name </th>
<th> Last Name </th>
<th> Number </th>
<th> Wins </th>
<th> Losses </th>
<th> OTL </th>
<th> Save% </th>
<th> GAA </th>
</tr>
</thead>
</table>
</body>
Теперь моя таблица выглядит следующим образом:
Как вы должны быть в состоянии видеть, я могу щелкнуть по заголовкам столбцов, в этом случае нажимается «Цели», но таблица фактически не сортирует данные.
Я искал несколько разных решений в StackOverflow, и, похоже, ничего не работает. Многие из этих решений включали настройку tablesorter с помощью uitheme и виджета zebra, но кажется, что каждый раз, когда я переключаюсь с темы по умолчанию, я полностью теряю форматирование таблицы.
(Да, у меня есть необходимые файлы и ссылки, включенные в мой проект ASP, когда я пытаюсь переключить темы.)
Черт возьми, просто для удовольствия я зашел на страницу документации tablesorter и скопировал всю их конфигурацию из их демо-версии, просто чтобы посмотреть, сработает ли это, и это привело к той же потере всего моего форматирования таблицы.
Итак, я не могу понять, чего мне здесь не хватает, и я был бы очень признателен, если бы вы все помогли мне разобраться в этом. Я устал от бесконечных поисков. Спасибо. Надеюсь, я предоставил достаточно информации.
Комментарии:
1. Похоже, что к каждой строке добавляется новая
<tbody>
. Переместите<tbody>
за пределы вашего цикла.2. Я не могу поверить, что это все, что потребовалось для устранения этой проблемы. Я искал решение в течение нескольких дней. Спасибо.
3. Добро пожаловать! Добавьте свое решение в качестве ответа, и я поддержу его. Мне больше не нужны очки 😉
4. Извините, я все время забывал опубликовать код решения до сих пор. Но у меня все еще возникают проблемы с правильной работой виджетов. Каждый раз, когда я добавляю какой-либо код конфигурации виджета, я снова теряю функциональность сортировки. Идеи?
5. Селекторы должны включать в себя
tbody
:$("#Skaters tbody").append(...)
и$("#Goalies tbody").append(...)
; Если новое содержимое или виджеты добавляются динамически, используйте$('table').trigger('update')
вместо повторного вызоваtablesorter
.
Ответ №1:
переместил теги tbody за пределы циклов, которые заполняют мои таблицы, в html-объявление таблиц, и это устранило проблему.
@model MyAspApp.Models.Jackets
@{
ViewBag.Title = "Index";
}
<h2>Roster</h2>
<head>
<meta name="viewport" content="width=device-width" />
<title>Multi-model view attempt</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="~/Content/theme.default.css">
<link rel="stylesheet" href="~/Content/jquery-ui.min.css">
<script type="text/javascript" src="~/Scripts/jquery-latest.min.js"></script>
<script src="~/Scripts/jquery-ui.js"></script>
<script src="~/Scripts/jquery-ui.min.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.tablesorter.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.tablesorter.widgets.js"></script>
</head>
@section scripts
{
@Scripts.Render("~/bundles/jquery.tablesorter")
<script type="text/javascript">
$(document).ready(function () {
$("#Skaters").tablesorter(getSkaters());
$("#Goalies").tablesorter(getGoalies());
});
</script>
}
<script>
function getSkaters() {
var allSkaters = @Html.Raw(Json.Encode(ViewBag.Skaters));
for (var i = 0; i < allSkaters.length; i ) {
$("#Skaters").append(
"<tr><td >" allSkaters[i].First_Name "</td>"
"<td>" allSkaters[i].Last_Name "</td>"
"<td>" allSkaters[i].Number "</td>"
"<td>" allSkaters[i].Position "</td>"
"<td>" allSkaters[i].Goals "</td>"
"<td>" allSkaters[i].Assists "</td>"
"<td>" allSkaters[i].Points "</td></tr>");
}
}
function getGoalies(){
var allGoalies = @Html.Raw(Json.Encode(ViewBag.Goalies));
for (var i = 0; i < allGoalies.length; i ){
$("#Goalies").append(
"<tr><td>" allGoalies[i].First_Name "</td>"
"<td>" allGoalies[i].Last_Name "</td>"
"<td>" allGoalies[i].Number "</td>"
"<td>" allGoalies[i].Wins "</td>"
"<td>" allGoalies[i].Losses "</td>"
"<td>" allGoalies[i].OTL "</td>"
"<td>" allGoalies[i].Save_ "</td>"
"<td>" allGoalies[i].GAA "</td> </tr>");
}
}
</script>
<body>
<h1>Skaters</h1>
<table id="Skaters" class="tablesorter">
<thead>
<tr>
<th> First Name </th>
<th> Last Name </th>
<th> Number </th>
<th> Position </th>
<th> Goals </th>
<th> Assists </th>
<th> Points </th>
</tr>
</thead>
<tbody></tbody>
</table>
<h2>Goalies</h2>
<table id="Goalies" class="tablesorter">
<thead>
<tr>
<th> First Name </th>
<th> Last Name </th>
<th> Number </th>
<th> Wins </th>
<th> Losses </th>
<th> OTL </th>
<th> Save% </th>
<th> GAA </th>
</tr>
</thead>
<tbody></tbody>
</table>
</body>