Я использую Bootstrap 4 Модальное окно с частичным представлением, которое отображает сетку. Все работает нормально, пока я не попробую сортировать / фильтровать / разбивать на страницы. Модал отображает правильный набор данных, но когда я пытаюсь фильтровать / сортировать / разбивать на страницы, он вызывает контроллер / метод, который заполнил страницу, с которой был вызван модал.
При наведении указателя мыши на столбец для сортировки он отображает URL-адрес внизу, а этот URL-адрес содержит контроллер / действие страницы, на которой было создано всплывающее окно, а не контроллер / действие, которое использовалось для заполнения всплывающего окна. Параметры в конце URL-адреса являются правильными для столбца, который я пытаюсь отсортировать - это означает, что он имеет правильные параметры для метода действия для частичного просмотра и сортируемого столбца, просто он имеет контроллер / метод для страницы и не модальный.
Это заполнитель частичного вида в _Layout:
@Html.Partial("_AuditModal")
Это функция в _Layout, которая используется для вызова контроллера для частичного просмотра и для отображения модального режима:
function ShowAudit(tblName, tblId) {
var url = '@Html.Raw(@Url.Action("AuditInfo", "Home", new { tableName = "__rId__", tableId = "__ds__"}))';
url = url.replace('__rId__', tblName).replace('__ds__', tblId);
$.get(url, function (data) { $('.modal-body').html(data); });
$('#AuditInfoModal').modal('show');
$('#AuditInfoModal').on('hidden.bs.modal', function(e) { $('.modal-body').html("") });
};
Вот модальная страница:
@using (Html.BeginForm("AuditInfo", "Home", FormMethod.Post, new {area = "Admin", @class = "container", role = "form", @id = "form1", oncomplete = ""}))
{
<div class="modal hide fade " id="AuditInfoModal">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Audit Info</h4>
<button type="button" class="close float-left" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div>
}
И это частичная страница для модального тела:
@using (Html.BeginForm("AuditInfo", "Home", FormMethod.Post, new {area = "Admin", @class = "container", role = "form", @id = "form1", oncomplete = ""}))
{
@Html.Grid(Model).Columns(columns =>
{
columns.Add(c => c.USER_ID).Titled("User").Filterable(true);
columns.Add(c => c.COMMENT).Titled("Comment").Filterable(true);
columns.Add(c => c.CREATED).Titled("Audit Date").Filterable(true);
}).WithPaging(10).Sortable(true)
}
Затем на каждой из моих страниц у меня есть кнопка, которую пользователь может нажать, чтобы вызвать аудит для записи, которую он просматривает:
columns.Add().Encoded(false).Sanitized(false).SetWidth(30).RenderValueAs( data => @"<button class='btn-secondary' type='btn' onclick='ShowAudit('EQUIPMENT_TYPE'," + data.ID+")'> Audit </button>");
Вот действие в HomeController:
public ActionResult AuditInfo(string tableName, int tableId)
{
var data = _auditSvc.GetAllByTableId(tableName, tableId).OrderByDescending(o=> o.CREATED).ToList();
return PartialView("_AuditInfo", data);
}
Не уверен, что проблема заключается в том, что страница, из которой вызывается всплывающее окно, также содержит сетку и использует этот контроллер / метод во всплывающем окне для сортировки / фильтрации / разбиения на страницы, а не контроллер / метод для частичной страницы