【问题标题】:MVC3 webgrid filtering advice?MVC3 webgrid过滤建议?
【发布时间】:2012-01-12 20:58:48
【问题描述】:

我正在尝试找出将过滤应用到我在主/索引视图 (MVC3) 中显示的 webgrid 的最佳方法(最少的努力)。

我添加了一个 multiselet,它允许按某个列进行过滤,我想捕获每个选择项的点击事件(我已经实现并工作),然后以某种方式重新调用包含所有内容的 Index() 方法根据是否从过滤器(多选)调用来重建视图的代码。

解决此问题的最佳方法是什么?我知道这是一个广泛的要求,但任何信息将不胜感激。

谢谢!

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-3 jquery


    【解决方案1】:

    您可以将多选放在表单中。那么您有 2 种可能性提交此表单:

    1. 使用提交按钮
    2. 使用多选的 onchange 事件(在这种情况下,您必须使用 javascript)

    第一点很简单:

    @using (Html.BeginForm())
    {
        @Html.ListBoxFor(x => x.SelectedItems, Model.Items)
        <button type="submit">Filter</button>
    }
    

    要实现第二个,您可以使用 jQuery 并订阅多选的更改事件。首先,让我们给这个多重选择一个 id,这样我们就可以更容易地选择它:

    @using (Html.BeginForm())
    {
        @Html.ListBoxFor(x => x.SelectedItems, Model.Items, new { id = "filter" })
    }
    

    然后在一个单独的 javascript 文件中:

    $(function() {
        $('#filter').change(function() {
            // when the selection changes we manually trigger the submission
            // of the containing form
            $(this).closest('form').submit();
        });
    });
    

    在这两种情况下,我们提交的控制器操作都将采用字符串数组作为参数,该参数将表示多选中的选定值,用于过滤结果集。

    【讨论】:

    • QQ:不要劫持这篇文章或超出范围,但是如果我有另一个多选过滤器2,并且想要在过滤器1中选择一个项目时获得它的选定值以及过滤器1的选定值?
    • @Mariah,在第一个过滤器的更改事件中,您可以使用$('#filter2').val() 读取第二个过滤器的选定值。由于 filter2 是一个多选,这将返回一个值数组。
    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 2012-03-03
    • 2012-01-02
    • 2011-06-20
    • 2012-05-02
    • 2012-05-05
    • 2012-12-01
    • 2013-10-09
    相关资源
    最近更新 更多