0

我根本无法在标题中正确描述这一点。

我们有我们产品的用户事件历史记录,它显示为分页,允许您设置每页的事件数,并根据需要过滤多个列的结果。过滤器过去只是一个单一的选择。例如,将有一个事件类型的下拉列表,您可以只选择其中一个并对其进行过滤。我添加了对在每个过滤器下拉列表中选择多个选项的支持,现在分页不起作用。

它现在所做的是为每个页码、上一页/下一页链接以及更改每页事件数的链接生成 ActionLink。由于它们只是单个选择,因此很容易将这些值作为路由值放入并将它们发送到控制器,控制器将使用它们为下一页返回正确过滤的数据。现在我混合了简单的枚举值(一些下拉菜单仍然只是单个选择)和枚举值列表。

我在我的页面上接收过滤器数据作为 RouteValueDictionary,所以我必须检查该值是一个对象还是一个对象列表,然后才能对它做任何适当的事情,这让我觉得很难看。

所以简而言之,我需要生成将过滤器选项发送回控制器的链接。一些过滤器选项将是一个以字符串为键的枚举,而一些将是一个以字符串为键的枚举列表。<string, object我可以在> 字典中的视图侧使用这些过滤器选项。

我只是无法弄清楚这样做的“好”方式是什么。

让我知道您是否需要了解其他信息。

4

1 回答 1

0

我认为,当您的过滤器更新时,您需要刷新结果页面。如果是这种情况,我会做一些 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);
        }
    });
});
于 2013-03-14T22:59:01.807 回答