ASP.NET MVC分页,当您有多个条件时

时间:2015-08-25 18:19:01

标签: asp.net-mvc paging

在ASP.NET MVC中可视化列表(由多个条件驱动)时,最佳实践实现是什么?

换句话说 - 我正在想象一个非常大的项目列表。因此 - 我已经实现了(通用的)分页,这很好用。但是,我还有一个可选的搜索表单,它根据多个条件过滤项目。我将如何实现保留搜索条件的分页?显而易见的答案是路由,但是,我不想在URL中传递10-20个不同的参数。我的另类选择是什么?表格发布?

TL; DR; - 使用多个过滤条件进行分页,而无需为每个过滤器创建路由。

2 个答案:

答案 0 :(得分:0)

我建议你远离路由,因为这很快就会演变成一种无法解决的问题。使用POST可能不是明智之举,因为它不是非常用户友好,因为他们不能按预期标记URL或使用他们的后退按钮(不重新发布)。最好的方法是使用GET和querystring,如上所述。

为了避免使用大型网址(因为网址通常最多可达2,000个字符,因此通常不会出现问题),您可以使用默认和空过滤器值。在创建和传递过滤器值时,只需省略包含默认值或空值的值,并在代码中隐式设置它们。这会删除您的网址中的许多空参数,例如example.com/?query=somestring&p1=&p2=&p3=&p4=,并将其缩减为example.com/?query=somestring

另一条随机建议,请确保创建一个合适的ViewModel,以包含与过滤器和分页参数及其默认值相关的所有逻辑,并将其作为HttpGet操作方法中的参数传递。

答案 1 :(得分:0)

对于基于许多动态过滤器的过滤列表,我更喜欢使用oData。有些人会说这是一个漏洞抽象(这是真的),但在这种情况下它真的很方便,你希望能够返回过滤和分页结果,以及这些过滤器可能很复杂,也可能随着时间的推移而变化。 / p>

然后,客户端完成所有实际的过滤器生成,并且服务器端代码非常少。您可以通过端点公开IQueryable,对方法有一些限制,例如最大返回结果或授权检查,并在客户端代码中构建过滤器的逻辑和行为。

查看示例时请记住,您不必实现其他组件,如update,delete,create。

See this for Web API 2.2 + oData v4.0 example