Я строю ASP. NET Ядро MVC Приложение. (. NET Core 3.1)
В одном из представлений - Результаты. chtml (с огромным количеством отображаемых строк БД), я решил отобразить более подробную информацию о каждой строке во всплывающем окне Bootstrap.
Итак - каждая строка в этом представлении имеет кнопку, которая отображает модальное поле с соответствующими данными, связанными свойством кнопки. Я загружаю ViewComponent в это модальное тело, используя 'on (' show.bs.modal ') и $. Get () - Я вызываю действие в мой контроллер и действие возвращает ViewComponent .
Загружается правильный ViewComponent со всеми правильно выбранными данными. Проблема:
Все, что связано с плагином jQuery DataTables, исчезло из модального. (когда я отображал его на отдельной странице - он работал отлично)
То, что я пытался изменить
Сначала у меня были jQuery DataTables скрипт загружен в файл .cs html этого ViewComponent, но он ведет себя совершенно непредсказуемо. После того, как параметры сортировки и фильтрации появились, один раз нет. Я решил изменить его и Я переместил jQuery Сценарии DataTables в главное представление - Results.cs html. Теперь: это не работает, но ... ошибка, говорящая о том, что метод dataTable () не распознан, отсутствует в консоли JS! Это означает, что он успешно загрузил скрипты DataTables ...
Где мне загружать скрипты DataTables? Теперь они загружены в файл Layout.cs html. Возможно ли, что порядок этих загрузок делает невозможным использование DataTables внутри модала? Является ли это даже источником моих проблем
Важные кодовые части
Layout.cshtml
Сценарий внутри файла Results.cs html (с перемещенным фрагментом в конце - dataTables (...))
$(function () {
$(document).ajaxStart(function() {
$("#loading").show();
});
$(document).ajaxStop(function() {
$("#loading").hide();
});
$('#exampleModal').on('show.bs.modal', function (event) {
var container = $("#receiptDetailsView");
var clickedRow = $(event.relatedTarget);
var accountId = clickedRow.data('accountidvalue');
$.get("/Receipts/" + accountId, function (data) { container.html(data); });
});
$("#exampleModal").on("hidden.bs.modal", function () {
$("#receiptDetailsView").html("");
});
$('#sortableReceiptsTable').dataTable({
"filter": true,
"lengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
});
});
Модальная разметка в Results.cshtml
Действие, вызываемое AJAX get:
[HttpGet("receipts/{accountId}")]
public IActionResult ShowReceipts([FromRoute]string accountId)
{
// invokes the InvokeAsync method of ReceiptsViewComponent
return ViewComponent("Receipts", accountId);
}
InvokeAsyn c Метод внутри класса ViewComponent:
public async Task<IViewComponentResult> InvokeAsync(string accountId)
{
var allReceipts = await _cosmosDbService.GetReceiptsByAccountIdAsync(accountId);
List<ReceiptViewModel> recVMs = allReceipts.Select(u => u.ToReceiptViewModel()).ToList();
return View("Receipts", recVMs);
}
Спасибо!