GridMvc в Bootstrap Model Сортировка / фильтрация / разбиение на страницы не работает - PullRequest
0 голосов
/ 05 апреля 2019

Я использую 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">&times;</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(&#39;EQUIPMENT_TYPE&#39;," + 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);
    }

Не уверен, что проблема заключается в том, что страница, из которой вызывается всплывающее окно, также содержит сетку и использует этот контроллер / метод во всплывающем окне для сортировки / фильтрации / разбиения на страницы, а не контроллер / метод для частичной страницы

...