Потеря данных модели при переходе на следующую страницу - PullRequest
0 голосов
/ 18 января 2019

Я использую пейджинг в ASP.NET MVC, но теряю данные модели при переходе на следующую страницу.

Вот код:

Частичное представление:

@using PagedList;

@using PagedList.Mvc;

@model Models.MyObject

<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
<table class="table table-striped table-hover sortable">
<thead>
    <tr>
        <th width="240">@Model.HeaderNames[0]</th>
        <th width="240">@Model.HeaderNames[1]</th>
        <th width="240">@Model.HeaderNames[2]</th>
        <th width="240">@Model.HeaderNames[3]</th>
        <th width="120" class="no-sort"></th>
    </tr>
</thead>
<tbody>

    @foreach (var member in Model.PagedModelList)
    {
        <tr>
            <td><span class="sort-field-value">@member.Thead1</span></td>
            <td><span class="sort-field-value">@member.Thead2</span></td>
            <td><span class="sort-field-value">@member.Thead3</span></td>
            <td><span class="sort-field-value">@member.Thead4</span></td>
        </tr>
    }
</tbody>
</table>
<footer>
   <div>

    Page @(Model.PagedModelList.PageCount < Model.PagedModelList.PageNumber 
? 0 : Model.PagedModelList.PageNumber) of @Model.PagedModelList.PageCount

@Html.PagedListPager(Model.PagedModelList, page =>Url.Action("Reports",new { @page = page, FirstLoad = false }))
   </div>
</footer>

Контроллер:

public ActionResult Reports(MyObject model, int? page, bool FirstLoad = true)
{
        model.pageSize = 4;
        model.pageNumber = (page ?? 1);

        if (FirstLoad)
        {
            // getting the data from database here 
            // ... code

            // assigning pagemodelist
            model.PagedModelList = model.ModelList.ToPagedList(model.pageNumber, model.pageSize);
        }

        // here sending the model and all is good
        return PartialView("_MyView", model);
    }

Модель

public class MyObject
{
    public int SelectedPeriod { get; set; }
    public List<SecondObject> ModelList = new List<Secondobject>();
    public IPagedList<Secondobject> PagedModelList ;

    public int pageSize { get; set; }
    public int pageNumber { get; set; }
}

Второй класс модели:

public class SecondObject
{
    public string Thead1 { get; set; }
    public string Thead2 { get; set; }
    public string Thead3 { get; set; }
    public string Thead4 { get; set; }
}

Ожидается получение следующей страницы, но все, что я получаю, это пустая модель, которая вызывает нулевую ссылку при повторной отправке на просмотр из контроллера. Что я здесь не так делаю?

В первый раз я получаю правильные данные в модели, я показываю таблицу с правильными данными, затем, нажимая на следующую страницу, я отлаживаю в контроллере, чтобы получить пустое model.PagedModelList, даже некоторые другие пустые свойства модели.

Любая помощь приветствуется

1 Ответ

0 голосов
/ 18 января 2019

Возможно, попробуйте передать вашу модель в параметрах, таких как:

@Html.PagedListPager(Model.PagedModelList, page =>Url.Action("Reports",new {@model = Model, @page = page, FirstLoad = false }))

Редактировать: Другое решение - удалить MyObject из параметров. Загружайте каждый раз ваши данные из вашей базы данных. Вы можете следовать примеру в Проект GitHub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...