【问题标题】:Making a list sortable in ASP.NET MVC using jquery使用 jquery 在 ASP.NET MVC 中使列表可排序
【发布时间】:2011-06-20 12:16:40
【问题描述】:

我正在尝试弄清楚如何实现 jquery 可排序..

我有一个页面,其中包含一堆按类别分组的属性,如下所示:

  • A 类
    • 属性1
    • 属性2
    • 属性3
    • 属性4
  • B 类
    • 属性5
    • 属性6
    • 属性7
    • 属性8
  • C 类
    • 属性9
    • 属性10
    • 属性11
    • 属性12

最终的解决方案是能够对所有内容进行排序;对父级(类别)进行排序,对属性(子级)进行排序,并使用拖放操作在类别之间移动属性!.... 但我猜现在它正在拉伸它..

因此,能够使用拖放功能对每个类别下的属性进行排序将是一个不错的开始。 我一直在看 jquery sortable 似乎可以做到这一点,但我该如何实现呢? 我猜每个类别都需要一个脚本...

类似这样的:http://www.webresourcesdepot.com/wp-content/uploads/file/jquerydragdrop/

ASP.NET 4、EF 4、ASP.NET MVC 3、Razor 视图...

这是我必须处理的:

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>ArrangeAttributesViewModel</legend>
        @foreach (var _category in Model.AllAttributesForCheckBoxList.AttributeList)
        {
            <p>
            </p>
            <p>
            </p>
            <div id="@_category.CategoryName">
                @_category.CategoryName
                <ul>
                    @foreach (var item in _category.AttributesList)
                    {
                        <li id="@item.Priority.ToString()">
                            @Html.CheckBox(item.AttributeID.ToString(), item.Chosen)
                            @(" " + item.AttributeTitle)
                        </li>
                    }
                </ul>
            </div>
        }
        <p>
            @Html.ActionLink("Create New", "Create")
        </p>
        <p>
        </p>
        <p>
            <input type="submit" value="Save Changes" />
        </p>
    </fieldset>
}

有什么想法吗? 非常感谢任何帮助!

【问题讨论】:

  • 除非优先级是字母数字并以字母开头,否则您的属性 li 元素的 ID 将无效。
  • 好的,我会调查的。

标签: jquery asp.net-mvc asp.net-mvc-3 razor jquery-ui-sortable


【解决方案1】:

您不需要遍历它们,但是为ul 元素使用一个类将有助于区分它们。使用containment parent 将它们的移动限制到父元素可能会使意图更清晰,但除非您指定connectWith 选项,否则它们应该保留在各自的列表中。请参阅http://jsfiddle.net/R4afy/ 上的一个简单示例

    <div id="@_category.CategoryName">
        @_category.CategoryName
        <ul class="sortable-container">
            @foreach (var item in _category.AttributesList)
            {
                <li id="@("P" + item.Priority.ToString())">
                    @Html.CheckBox(item.AttributeID.ToString(), item.Chosen)
                    @(" " + item.AttributeTitle)
                </li>
            }
        </ul>
    </div>

<script type="text/javascript">
     $(function() {
          $('.sortable-container').sortable({
              containment: 'parent'
          });
     });
</script>

注意:这不解决保留所选排序顺序的问题。为此,您需要在所述问题范围之外的其他代码。除非排序功能只是为了帮助用户识别此页面上的元素,否则我认为您会发现记录顺序非常重要。

【讨论】:

  • 似乎无法正常工作,我需要添加哪些 jquery 文件?现在我有:jquery-ui-1.8.11.js 和 jquery-1.5.1.js
  • @bek 以我使用 jQuery 1.6 和 jQuery UI 1.8.13 为例。
  • 显然这两个脚本引用的写入顺序很重要,ui应该在另一个下面...现在可以排序了,只是想弄清楚如何保存新顺序..
  • @bek - 是的,jQuery UI 依赖于 jQuery 本身。
  • 我说我是初学者吗?)
【解决方案2】:

不要自吹自擂,但我认为我写的一个插件正好适合你想要做的事情。它允许您根据 HTML 数据属性对列表进行排序,因此您可能需要稍微调整您的标记,但总的来说,我认为这是您正在寻找的。​​p>

https://github.com/jszpila/jquery.listSorter

【讨论】:

  • 很遗憾你的网页链接失效了。那里有演示吗?
  • 感谢您的回复,我有点含糊其辞。我想要进行某种拖放排序,因为没有可排序的属性。。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
相关资源
最近更新 更多