如何将复杂对象发送回控制器以进行分页
本文关键字:控制器 分页 复杂 对象 | 更新日期: 2023-09-27 18:04:03
我实在无法在标题中恰当地描述这一点。
我们有一个用户事件的历史记录,显示为页面,并允许您设置每页事件的数量,如果您愿意,还可以过滤几个列的结果。过滤器过去只能作为单个选择来工作。例如,会有一个事件类型的下拉列表,您可以只选择其中一个并对其进行过滤。我增加了对在每个过滤器下拉列表中选择多个选项的支持,现在分页不起作用了。
它现在所做的是为每个页码、前一页/下一页链接以及改变每页事件数量的链接生成ActionLinks。因为它们之前只是单个选择,所以很容易将这些值作为routevalues放入并发送给控制器,控制器将使用它们为下一页返回正确过滤的数据。现在我有了简单的枚举值(一些下拉列表仍然只是单个选择)和枚举值列表的混合物。
我在我的页面上接收过滤器数据作为RouteValueDictionary,所以我必须检查这个值是一个对象还是一个对象列表,然后我才能对它做任何正确的事情,这让我觉得很难看。
所以简而言之,我需要生成将过滤器选项发送回控制器的链接。一些筛选器选项将是一个以字符串为关键字的枚举,而另一些将是一个以字符串为关键字的枚举列表。我可以在视图侧的<string, object
>字典中找到这些过滤器选项。
我就是想不出什么才是"好"的方法。
我认为,当您的过滤器更新时,您需要刷新结果页面。如果是这种情况,我会使用jQuery Ajax来处理整个事情,而不是修改链接url。我切换到Ajax的原因是因为它很容易创建您想要发送到服务器的对象,而将复杂对象作为查询字符串发送则不那么容易。你应该这样写:
$(document).on('click','selector of your filter inputs', function(){
$.Ajax({
url: '/[Controller]/[Action]',
type: 'GET',
data: { filter1: $('input').val()... }, // however complex object you need
success: function(data){
$('selector of the result container').html(data);
}
});
});