我有一个名为“类别”的控制器,您可以输入几个字母并获得过滤后的列表。
相当标准的东西。但是,我将结果集与分页相结合,并遇到了麻烦。
当您第一次进入该页面时,我列出了所有类别。当您在文本框中键入时,您将获得一个筛选列表,但我只返回列表并重新显示它。我不会再显示整页。
现在当我点击第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>
答案 0 :(得分:4)
public ActionResult Categories(int? page, string? filter)
{
CategoriesDataRepository categoriesRepository = new CategoriesDataRepository();
CategoriesFormViewModel fvm = new CategoriesFormViewModel();
if (filter == null)
fvm.categories = categoriesRepository.All().OrderBy(x => x.name).ToPagedList(page.HasValue ? page.Value - 1 : 0, CacheHelper.Get().CategoryPageSize);
else
fvm.categories = categoriesRepository.All().Where(x => x.name.ToLower().Contains(filter.ToLower())).OrderBy(x => x.name)ToPagedList(page.HasValue ? page.Value - 1 : 0, CacheHelper.Get().CategoryPageSize);
return View(fvm);
}
此外,您应该相应地修改部分CategoryList
中的ActionLinks。
答案 1 :(得分:1)
您应该尝试通过jquery而不是href为链接提供重新显示的功能。然后您将不必重新加载页面。
$(".link").click(function() {
//redisplay results
});