#c# #html #css #razor #datatables
#c# #HTML #css #razor #таблицы данных
Вопрос:
Я пытаюсь использовать js-аддон DataTables из DataTables.net в моем проекте, который использует страницы Razor. Однако он просто не хочет работать, и я не могу понять, почему. Я настроил его в VS Code, чтобы протестировать его, и он отлично сработал для теста. Вот код и скриншот вывода:
<html>
<head>
<link rel="stylesheet" href="http://cdn.datatables.net/1.10.11/css/jquery.dataTables.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script src="http://cdn.datatables.net/1.10.11/js/jquery.dataTables.min.js"></script>
<script>
$(document).ready(function(){
$('#myTable').DataTable();
});
</script>
</head>
<body>
<table id="myTable">
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Row 1 Data 1</td>
<td>Row 1 Data 2</td>
</tr>
<tr>
<td>Row 2 Data 1</td>
<td>Row 2 Data 2</td>
</tr>
</tbody>
</table>
</body>
</html>
Однако, когда я пытаюсь сделать то же самое в VS 2019, используя Razor Pages, ничего не происходит, он просто печатает неформатированную таблицу. Вот код и скриншот, которые у меня есть для этого.
@page
@model CustomerPageTest.Pages.Customer.ListModel
@{
ViewData["Title"] = "List";
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
<link rel="stylesheet" href="http://cdn.datatables.net/1.10.11/css/jquery.dataTables.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script src="http://cdn.datatables.net/1.10.11/js/jquery.dataTables.min.js"></script>
<script>
$(document).ready(function () {
$('#myTable').dataTable();
});
</script>
<table id="myTable">
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Row 1 Data 1</td>
<td>Row 1 Data 2</td>
</tr>
<tr>
<td>Row 2 Data 1</td>
<td>Row 2 Data 2</td>
</tr>
</tbody>
</table>
Как вы можете видеть, две программы очень похожи, просто синтаксис немного отличается. Есть ли у кого-нибудь идеи о том, как это исправить?
Комментарии:
1. Вы видите какие-либо ошибки в консоли при загрузке страницы Razor? Я заметил, что вы смешиваете
http
иhttps
в своих ресурсах. Возможно, посмотрите, сможете ли вы получитьDataTables
fromhttps
??
Ответ №1:
Вот фрагмент из файла _Layout.cshtml по умолчанию:
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
amp;copy; 2020 - RazorPages.Test - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@RenderSection("Scripts", required: false)
Редактируемое представление вводится в конечный HTML-файл при @RenderBody()
вызове. Однако это выше нескольких сценариев в нижней части файла.
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
Первый скрипт в списке — это еще один экземпляр jQuery. Это означает, что в результирующем HTML-файле вы загружаете jQuery два разных раза. Когда загружается второй экземпляр jQuery, он удаляет дополнительные функции, которые скрипт DataTables добавляет в объект jQuery, поэтому таблица загружается не так, как ожидалось.
Чтобы устранить эту проблему, вы можете загрузить свои скрипты в разделе просмотр в Razor.
@section Scripts
{
<script src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script>
$(document).ready(function () {
$('#myTable').DataTable();
});
</script>
}
Или вы можете оставить представление как есть и удалить jQuery из _Layout.cshtml.