我有一个名为“类别”的控制器,你可以输入几个字母,并得到一个过滤列表回来。
相当标准的东西。但是,我将结果集与分页相结合,遇到了一个障碍。
当你第一次进入这个页面时,我列出了所有的分类。当您在文本框中键入内容时,会得到一个经过筛选的列表,但我只返回列表并重新显示它。我不再显示整个页面。
现在,当我点击第2页链接时,过滤器丢失了,我又回到了我的整个列表。
我意识到在下面的代码中,我没有抓住我的分类ActionResult中的过滤文本,我想这是我的问题。我只是想知道怎么去那里。
如何维护列表?以下相关代码;
public ActionResult Categories(int? page)
{
CategoriesDataRepository categoriesRepository = new CategoriesDataRepository();
CategoriesFormViewModel fvm = new CategoriesFormViewModel();
fvm.categories = categoriesRepository.All().OrderBy(x => x.name).ToPagedList(page.HasValue ? page.Value - 1 : 0, CacheHelper.Get().CategoryPageSize);
return View(fvm);
}
public ActionResult jQueryFilterCategories(String filter)
{
CategoriesDataRepository categoriesRepository = new CategoriesDataRepository();
return PartialView("CategoryList", categoriesRepository.All().Where(x => x.name.ToLower().Contains(filter.ToLower())).OrderBy(x => x.name).ToPagedList(0, CacheHelper.Get().CategoryPageSize));
}
查看
<script type="text/javascript">
$('.FindCategory').keyup(function () {
var searchText = $('.FindCategory').val();
$.post('/Home/jQueryFilterCategories', { filter: searchText }, function (newHTML) {
$('.Categories').html(newHTML);
return false;
});
});
</script>
<div class="pager">
<%= Html.Pager(Helpers.CacheHelper.Get().CategoryPageSize, Model.categories.PageNumber, Model.categories.TotalItemCount, "Categories", "Home")%>
</div>
<div class="CategoryList">
<div>
<p>Type here to find categories <%= Html.TextBox("searchTerm", Model.searchTerm, new { @class = "FindCategory" })%></p>
</div>
<div class="Categories">
<% Html.RenderPartial("CategoryList", Model.categories); %>
</div>
</div>