C#ASP.NET MVC:用于搜索的动态查询字符串

我有以下情况: 1)电话簿表 2)通过表格搜索的多种方式(名字,姓氏) 3)还有强制性分页(页面大小和页码)以及排序 当用户首先访问该页面时,Url就是/电话簿。现在我们假设用户正在搜索“abc”,那么Url变成/电话簿?q = abc。然后他按照名字排序,Url应该成为/电话簿?q = abc& sort = firstName& order = asc。 我的问题是如何编程我的视图自动附加/修改查询字符串,以便它仍然包含以前输入的约束(如在我的“abc”)查询,但调整/添加新的约束,例如,如果排序,然后分页等等被使用? 我讨厌使用JS并为此重写位置,而是让页面在每次对我的页面上的每个排序/页面/过滤器链接进行回发后生成真正的锚点(a href)。 欣赏你的时间人:)

已邀请:

dab

赞同来自:

只需使用匿名对象传递额外的参数即可:

<%= Html.ActionLink("Sort ascending", "Search", "PhoneBook", new {order="asc"}) %>
<!-- or -->
<%= Url.Action("Search", "PhoneBook", new {order="asc"}) %>
如果额外的参数没有在路由中定义,它们将被添加为查询字符串。

lvero

赞同来自:

我假设你在页面上有一些控件来设置什么将被排序,按照什么顺序,显然是一种方法来定义将被过滤的内容? 当你加载页面时,为什么不在视图中设置这些值,然后控制器应该在下次加载时正确更新?这样用户就可以很容易地更改它们,而无需触摸URL。在这种情况下,直接将数据从控制器传递到视图,并像设置任何其他控件一样设置值,例如:

<input type="text" name="search" value="<%= (string)ViewData["Search"] %>" />
如果你确实需要它在URL中,你可以通过以匿名类型传递额外的参数来修改按钮。 对于这样的链接:
<%= Url.Action("Search", "PhoneBook", new {order="asc"}) %>
对于一个表单(因为你没有专门设置一个提交按钮)就像这样
<% using (Html.BeginForm(new {order="asc"}) { 
你可以通过做类似的操作来从控制器中获取这些信息
<% using (Html.BeginForm(new { sort=(string)ViewData["Sort Order"] }))

要回复问题请先登录注册