【问题标题】:Filtering Pane, ASP MVC 3过滤窗格,ASP MVC 3
【发布时间】:2011-06-21 11:06:43
【问题描述】:

我的计划是使用 ASP MVC 3 创建一个包含两个窗格的页面。左侧窗格应该是一个小的过滤器窗格,右侧是主要内容,显示对象列表(比如产品)。

最初将显示所有产品,因为没有应用过滤器。选择“仅红色”时,列表中仅显示红色产品。进一步选择价格范围时,只会显示该价格范围内的产品。

从功能上讲,计划是将过滤窗格实现为带有复选框的树视图(以便能够深入到越来越多的特定过滤选项),在图形上它可能会以某种方式增强以提高可用性。

实现过滤器窗格和主列表之间耦合的最佳方式是什么?一切都应该在服务器端工作,但当然应该尽可能使用 javascript (jQuery) 进行直接反馈。

最简单的方法可能是使其紧密耦合的解决方案,使用自定义构建的 javascript 调用特定的 Asp MVC 操作(回退到表单帖子)。足够可行,当然,但是如何使解决方案可重用?此外,在向前和向后导航时不要丢失所有过滤数据会很好,我想 GET 参数是唯一合适的方法吗?

是否有任何最佳实践、任何指导方针或任何可以以此为基础的东西来制作一个用于过滤的良好模块化结构。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 filtering


    【解决方案1】:

    Victor,我最近不得不解决同样的问题。我不保证这是最好的方法,但它很清楚,甚至应该在 JavaScript 被禁用的情况下运行良好(谁还会这样做?)。

    • 创建一个调用具有所有字段可选搜索选项(如“仅红色”)的操作。

    • 在同一个表单中,为不直接作为字段(分页、排序...)的事物添加空的隐藏值

    • 使用出色且非常易于使用的 JQuery.Forms (http://www.malsup.com/jquery/form/) 设置您的表单,以使您通过 JQuery 提交表单(您的所有表单值将是在表单提交时作为 JSON 传递)。

    • 让您的后退/下一个/分页/排序链接通过查询(无 JS 回退)传递它们各自的值,并使用 JQuery 来捕获它们的点击事件。这些链接上的 JQuery 点击事件应该将链接传递的值(页码,排序列名......)分配给表单中相应的隐藏字段并调用提交(感谢 Jquery.Forms 将通过AJAX)。

    • 配置 JQuery.Forms 时,可以定义回调方法。在回调方法中获取结果(您的操作返回的 HTML,应该包含您的过滤+排序+分页结果)并用它替换文档(或 DIV,如果您使用部分操作 + 视图)。

      李>

    结果是一个在 JS 关闭时可以工作的 JQuery 解决方案。除了连接事件处理程序之外,您还可以编写非常少的 JS 代码。

    我不确定它是否会有所帮助,但在 MVC 3 中,您可以从视图中访问一个名为 IsAjax 的属性,因此您可以执行特定的操作以在从 AJAX 调用时为稍微不同的视图提供服务。

    干杯

    【讨论】:

    • 谢谢,听起来很符合我的想法——一长串 GET 参数 :) 无论如何——有什么聪明的方法来处理服务器端吗?比“Action Filter(string thisValue, string thatValue, List checkboxFiltering, int numberOfResults, int page, ...)”更好?似乎列表会很长,应该存在一些更优雅的解决方案?
    • 实际上我所建议的将通过表单发布参数。如果您不想发送一长串过滤参数,请改为创建一个具有过滤属性的对象。在您的操作中,将参数替换为单个对象。模型绑定会自动将发布的参数与对象的属性绑定。
    • +1 并被接受——我最终选择了 jQuery.Forms 方式。非常感谢。关于论点,从 ASP 的角度来看,GET/POST 并不重要。最后,我们在 Telerik ASP MVC Treeview 组件之上构建了我们的解决方案,因此为了简单起见,我们使用它们的模型绑定作为基础。
    猜你喜欢
    • 1970-01-01
    • 2019-03-26
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2013-05-20
    • 1970-01-01
    相关资源
    最近更新 更多