MVC中的PagedList:使用Ajax加载,不能保留搜索项
本文关键字:不能 保留 搜索 加载 Ajax 中的 PagedList 使用 MVC | 更新日期: 2023-09-27 18:08:30
我在谷歌上搜索了一下,虽然有几个人问过这个问题,但我发现没有人贴出一个可行的解决方案。
我正在使用PagedList包,以便在我的MVC应用程序中创建页面。我通过Ajax加载页面。问题是我不能保留我的搜索词(更改页面就像没有过滤过任何东西一样)。
方法如下:
public PartialViewResult Search(string q, int? page, int? pageSize)
{
ViewBag.SearchQuery = q;
//Searching and sorting logic, not really relevant
return PartialView("_SearchedTable", listObj.ToPagedList((int)page, (int)pageSize));
}
如果我查看ViewBag。在部分视图中搜索查询项,我可以看到它,这是我所期望的。但无论何时更改页面,发送给控制器的所有内容都为空。这是我的页面条目
@Html.PagedListPager(Model, page => Url.Action("Search",
new { q = ViewBag.SearchQuery, page = page }),
PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(
new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "main-table"}))
查看调试器中的智能感知,所有内容都具有我期望的值,直到此元素再次将数据发送到Search方法,在这种情况下,它全部来自搜索方法为"null"。当我不使用Ajax,并让它在每次页面更改时调用完整的Index视图方法时,它可以很好地保留搜索功能。我添加的唯一东西是第三个参数,它启用不显眼的ajax和ajax选项。
编辑:我通过在部分视图中放置HTML帮助器来解决这个问题,这样它就会在每次刷新时执行。否则,@Url.Action()方法生成的锚标记将永远不会改变,并且由于第一次加载页面时所有内容都为空,因此在输入搜索条件时它们永远不会更新。
@Html.PagedListPager(Model.MovieInforamtions, page => Url.Action("GetMovieDatabase", page }), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing( new AjaxOptions(){ HttpMethod = "GET", UpdateTargetId = "movie_grid"}))
@arjit的评论帮助解决了一个类似的问题。其中movie_grid是DIV的id…