我目前正在开发一个相当简单的 MVC 应用程序,它允许用户输入一些搜索数据,获取结果列表,然后查看每个项目等。一切进展顺利,但是我现在正在尝试实现分页但是有一些麻烦。
我的搜索表单使用 HTTP GET,请求执行以下操作:
public ActionResult Results(PropertySearchData data, int? page)
{
...
IEnumerable<Property> search = mService.SearchProperties(data);
ViewData["SearchData"] = data;
return View("Results", "Site", search.ToPagedList(page ?? 0, 20));
...
}
从这里我从传递到我的视图中的 IEnumerable 集合中构建我的结果表。此外,我使用 ViewData 保存搜索参数,以便在用户请求不同页面时传递它们。
例如,要进入第一页,我想使用如下内容:
Html.ActionLink("First", "Results", new { data = ViewData["SearchData"], page = 1 })
但是,当这个链接生成时,我的链接是沿着
/Results?data=PropertySearchData&page=1
如果我完全删除 'page' 参数,并将 ViewData["SearchData"] 作为我的路由值传递,我的链接会按照我的意愿生成(即 PropertySearchData 的每个成员都作为查询字符串通过模型绑定传递功能。我猜这是因为模型绑定只有在您指定单一类型时才能正常工作?
我可以看到为什么这不起作用的几个原因;我遇到的麻烦是想出一种“好”的方式来做我想做的事情。我知道我在这里一定缺乏重要的理解,所以如果我能得到一些关于如何解决这个问题的指示,将不胜感激。
请注意,我真的想坚持使用 HTTP GET(因为这是一个搜索结果页面)。
谢谢!