在寻呼时保持国家

时间:2010-07-18 01:00:09

标签: asp.net-mvc jquery

我有一个名为“类别”的控制器,您可以输入几个字母并获得过滤后的列表。

相当标准的东西。但是,我将结果集与分页相结合,并遇到了麻烦。

当您第一次进入该页面时,我列出了所有类别。当您在文本框中键入时,您将获得一个筛选列表,但我只返回列表并重新显示它。我不会再显示整页。

现在当我点击第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>

2 个答案:

答案 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
});