代码之家  ›  专栏  ›  技术社区  ›  griegs

寻呼时保持状态

  •  1
  • griegs  · 技术社区  · 14 年前

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

    相当标准的东西。但是,我将结果集与分页相结合,遇到了一个障碍。

    当你第一次进入这个页面时,我列出了所有的分类。当您在文本框中键入内容时,会得到一个经过筛选的列表,但我只返回列表并重新显示它。我不再显示整个页面。

    现在,当我点击第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 回复  |  直到 14 年前
        1
  •  4
  •   kojo    14 年前
    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 相应地。

        2
  •  1
  •   Charmander    14 年前

    你应该尝试给你的链接一个函数来通过jquery重新显示,而不是一个href。这样就不必重新加载页面。

    $(".link").click(function() {
        //redisplay results
    });