Частичный просмотр результатов поиска не возвращает результатов при разбиении по страницам

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

это мой родительский вид: (только соответствующие коды Index.cshtml)

<form class="form">
    @using (Html.BeginForm("Index", "Home", FormMethod.Get))
    {  
        <div class=" form-group">
            @Html.TextBox("search", ViewBag.CurrentFilter as string, 
                new { @placeholder = "Enter class number", @class = "form-control" })
        </div>
        <div class="form-group">
            <input class="btn btn-success" type="submit" value="Search" id="btnclick" />
        </div>
    }
</form> 
<div class="tab-content col-xs-12">
    <div class="tab-pane fade in active" id="info">
        @if (Model.student_info.Count() != 0)
        {
            @Html.Partial("_studentinfo")
        }
        else
        {
            <h4 style="padding:5px;">No records found.</h4>
        }
    </div>
    <div class="tab-pane fade" id="grades">
        @if (Model.gradeperterm.Count() != 0)
        {
            @Html.Partial("_gradeterm")
        }
        else
        {
            <h4 style="padding:5px;">No records found.</h4>
        }
    </div>
</div>

Затем для каждого моего частичного просмотра я помещаю pagedlistpager

@if (Model.student_info.Count > 1)
{ 
    @Html.PagedListPager(Model.student_info, 
        page =>Url.Action("Index", 
            new { page = Page, currentFilter = ViewBag.CurrentFilter}))
}

Тогда мой контроллер выглядит так:

Guid query = new Guid();
query = (from b in db.school 
         where b.class_nr == search 
         select b.class_id).FirstOrDefault();

if (search != null)
{
    page = 1;
}
else 
{
    search = currentfilter;
}

ViewBag.CurrentFilter = search;

int pageSize = 5;
int pageNumber = (page ?? 1);
var smodel = new schoolmodel
{
    student_info = db.student_info.Where(x => x.class_id == query)
        .OrderBy(x => x.recorded_at_date_time)
        .ToPagedList(pageNumber, pageSize),

    gradeperterm = db.gradeperterm.Where(x => x.class_id == query)
         .OrderBy(x => x.term)
         .ToPagedList(pageNumber, pageSize)
};

return View(patmodel);

Когда я ищу, он успешно отображает первые пять страниц для каждой панели вкладок, однако, когда я нажимаю на следующую страницу, он отображает «Результаты не найдены», но моя строка поиска и текущий фильтр не являются нулевыми, как показано в моем URL. Как я могу заставить его работать? Я совершенно новичок в mvc. Ответы будут высоко оценены. Спасибо.


person WebNewbie    schedule 14.08.2015    source источник


Ответы (1)


Частичные представления должны быть похожи на фрагменты Razor, поэтому вам необходимо передать данные для частичных представлений, как показано ниже.

@Html.Partial("_studentinfo",Model)

Или, в качестве альтернативы, если вам нужно выполнить некоторую предварительную обработку, вы можете использовать дочернее действие, чтобы оно могло иметь свое собственное действие контроллера, как показано ниже.

@Html.Action("controller","action",new { id = 1, otherRouteParam = "pagekey" })

и пусть это действие отобразит частичный вид после указанной предварительной обработки

public PartialViewResult Action(int id, string otherRouteParam){
   //Additional Processing like Get a PagedList Slice of Data
   return PartialView("_studentinfo", result);
}
person Ody    schedule 14.08.2015
comment
Я пробовал @Html.Partial(_studentinfo,Model), но все равно получаю тот же результат. - person WebNewbie; 17.08.2015