向上移动并向下移动列表框中的项目

时间:2009-11-23 05:15:48

标签: jquery asp.net-mvc listbox

我的asp.net mvc(C#)应用程序中的数据库列表框中填充了一些项目。

我需要提供一个选项来向上/向下移动列表框中的项目,并使用更新的订单将其存储回数据库。

我喜欢使用jquery向上/向下移动列表框中的项目。这是最好的方式/灵魂吗?或者除了将它与listbox一起使用之外,还有其他方法吗?

2 个答案:

答案 0 :(得分:4)

我没有代码,但网上有几个使用jQuery移动div的例子。

我的建议是放弃列表框以支持一些可移动的div或其他东西。

Something like this might help you。它使用我认为的列表,并允许您重新排序它们。然后,您可以jQuery新订单并将其存储在数据库中。

答案 1 :(得分:3)

您可以使用以下内容移动项目客户端:

            $("#btnMoveSectionUp").click(function (e) {
            var curr = $("#<%= lstEditReportSections.ClientID %> option:selected");
            if (curr.length == 0) return;
            if (curr.index() > 0) {
                var prev = curr.prev();
                curr.insertBefore(prev);
            }
        });
            $("#btnMoveSectionDown").click(function (e) {
            var curr = $("#<%= lstEditReportSections.ClientID %> option:selected");
            if (curr.length == 0) return;
            if (curr.index() < $("#<%= lstEditReportSections.ClientID %> option").length - 1) {
                var next = curr.next();
                curr.insertAfter(next);
            }
        });

但是服务器不会看到客户端上所做的更改。我所做的是使用此代码将所有值存储在隐藏字段中,然后将其拆分在服务器端。

            $("#<%= btnSaveReport.ClientID %>").click(function (e) {
            if (confirm("Are you sure you want to save the report?") != true) return false;
            var sections = $("#<%= lstEditReportSections.ClientID %> option").map(function () {
                return $(this).val();
            }).get().join('#');
            $("#<%= hidEditReportSectionsList.ClientID %>").val(sections);
        });

这可能不太理想,但它对我有用。