kkakadiya Ответов: 2

AJAX вызов предотвращение разбиения на страницы


Привет,

Я реализовал разбиение на страницы в приложении MVC. когда страница загружается в первый раз, она работает правильно, когда я нажимаю на подкачку, то она делает вызов AJAX и связывает данные в моей HTML-таблице из ответа json. но после вызова AJAX пагинация не работает, и перезагрузите страницу и данные снова и сбросьте пагинацию на страницу номер 1.

как только вызов AJAX срабатывает, то пагинация не работает.
<table class="table table-striped" id="tblJobs">
    <thead> <tr> <th>Job Title</th> <th>Start Date</th> <th>Completion Date</th> <th>View Details</th> </tr> </thead>
    <tbody>
        @if (@Model.JobsList != null)
        {
            foreach (var item in @Model.JobsList)
            {
                <tr> <td>@item.JobTitle</td> <td>@item.StartDate.ToString().Split(' ')[0]</td> <td>@item.EndDate.ToString().Split(' ')[0]</td> <td><a type="button" href="@Url.Action("jobdetails", "PostWork", new { id = @item.PostworkId })" class="btn btn-default fixit-btn">View</a></td> </tr>
            }
            <tr>
                <td style="text-align:center;padding: 0px !important;" colspan="9">
                    <ul class="pagination" style="margin: 10px 0;">
                        @for (var i = 0; i < info.PageCount; i++)

                        {

                            if (i == info.CurrentPageIndex)

                            {

                                <li class="page-item active">
                                    <span class="page-link">
                                        @(i + 1)
                                        <span class="sr-only">(current)</span>
                                    </span>
                                    }
                                    else
                                    {
                                <li>
                                    <a href="" data-pageindex="@i" class="pager">@(i + 1)</a>
                                    }
                                    }
                            </ul>
                        </td>
                    </tr>
                            }
                            else
                            {
                                <tr>
                                    <td style="text-align:center;" colspan="9">
                                        Currently No Jobs Posted.
                                    </td>
                                </tr>
                            }
</tbody>
</table>


********* Javacript/Jquery*****************

$(".pager").click(function (evt) {
       //alert(evt);
       $(".loading").css("display", "inline");
       var pageindex = $(evt.target).data("pageindex");
       $("#CurrentPageIndex").val(pageindex);
       var CurrentPageIndex = pageindex;
       var PageCount = '@info.PageCount';
       var PageSize = '@info.PageSize';
       var SortDirection = '@info.SortDirection';
       var SortField = '@info.SortField';
       //evt.preventDefault();
       //$("form").submit();
       $.ajax({
           url: '@Url.Action("JobsServiceProviderIC", "PostWork")',
           type: "Post",
           dataType: "json",
           data: { CurrentPageIndex: CurrentPageIndex, PageCount: PageCount, PageSize: PageSize, SortDirection: SortDirection, SortField: SortField },
           success: function (data) {
               $(".loading").css("display", "none");
               //alert(data.length);
               $("#tblJobs > tbody").html("");
               if (data.data.length > 0) {
                   for (var i = 0; i < data.data.length; i++) {
                       tr = $('<tr/>');
                       tr.append("" + data.data[i].JobTitle + "");
                       var SDate = new Date(eval('new' + data.data[i].StartDate.replace(/\//g, ' ')));
                       var formattedSDate = SDate.getMonth() + 1 + '/' + SDate.getDate() + '/' + SDate.getFullYear();
                       var EDate = new Date(eval('new' + data.data[i].EndDate.replace(/\//g, ' ')));
                       var formattedEDate = EDate.getMonth() + 1 + '/' + EDate.getDate() + '/' + EDate.getFullYear();
                       tr.append("View");
                       $('#tblJobs > tbody').append(tr);
                   }
                   tr = $('<tr/>');
                   tr1 = $("<td style='text-align:center;padding: 0px !important;' colspan='9'>");
                   tr2 = $("<ul class='pagination' style='margin: 10px 0;'>");
                   for (var i = 0; i < data.PageCount; i++) {
                       if (i == data.CurPageIndex) {
                           tr2.append("<li class='page-item active'><span class='page-link'>" + (parseInt(i) + 1) + "<span class='sr-only'>(current)</span></span>");
                       }
                       else {
                           tr2.append("<li><a href='' data-pageindex='" + parseInt(i) + "' class='pager'>" + (parseInt(i) + 1) + "</a>");
                       }
                   }
                   tr1.append(tr2);
                   tr.append(tr1);
                   tr.append("</ul></td>");
                   $('#tblJobs > tbody').append(tr);
               }
               else {
                   tr = $('<tr/>');
                   tr.append(" No Jobs Found.");
                   $('#tblJobs > tbody').append(tr);
                   return false;
               }
           },
           error: function (jqXHR, textStatus, errorThrown) {
               $(".loading").css("display", "none");
           }
       });
       return false;
   });



Спасибо,
Krunal

Что я уже пробовал:

Я попытался создать другую функцию и вызвать ее из номеров подкачки, как только сработает вызов AJAX.
проверьте с помощью preventdefault.

[правка: добавлено в блок кода]

F-ES Sitecore

Люди не могут помочь вам с вашим кодом, если они его не видят.

kkakadiya

Извиняюсь,
Код был загружен.

Karthik_Mahalingam

Всегда использовать  Ответить  кнопка, чтобы отправить комментарии / запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

2 Ответов

Рейтинг:
17

Richard Deeming

Цитата:
$(".пейджер").нажмите кнопку(функция (ЭВТ) {

Это подключает обработчик событий к событию "щелчок" любых элементов с помощью class="pager" который уже существует, когда этот код выполняется.

Но когда вы загружаете новую страницу данных, вы заменяете все содержимое таблицы, включая все class="pager" элементы.

Новый class="pager" элементы будут нет подключите обработчик событий, потому что они не существовали, когда вы вызывали $(".pager").click(...

Чтобы устранить проблему, вам нужно использовать делегированный обработчик событий[^] прикреплен к родительскому элементу, который не будет заменен.
$("#tblJobs").on("click", ".pager", function(evt){
   // Event handler code unchanged...
});


Рейтинг:
1

kkakadiya

Привет Ричард,

Бах-бах.Спасибо за ответ. это сработало для меня. Я определенно знаю, что это кажется какой-то проблемой с моей привязкой, но не знаю. Этот вопрос испортил мне весь день.