【问题标题】:Reorder list after dynamically populated动态填充后重新排序列表
【发布时间】:2015-01-20 17:42:35
【问题描述】:

我有这个以编程方式填充的列表。

<ul id="topNavigation" class="topNavigation" runat="server"></ul>

这是列表项的代码

foreach (var node in children)
        {
            HtmlGenericControl li = new HtmlGenericControl("li");
            HtmlGenericControl span = new HtmlGenericControl("span");
            span.Attributes.Add("class", "editableLinks");
            span.Attributes.Add("data-id", node.id.ToString());


            var child = new Node(node.id);
            if (child.Name.Contains("contact"))
                break;

            var sortOrder = child.GetProperty("sortOrder");
            if (sortOrder != null)
                span.Attributes.Add("data-sort", sortOrder.Value);
            var hidden = "";
            var deleted = "0";
            var naviHide = child.GetProperty("umbracoNaviHide");
            var userDeleted = child.GetProperty("userDeleted");
            if (naviHide != null)
            {
                hidden = naviHide.Value;
                if (userDeleted != null)
                    deleted = userDeleted.Value;
               // nav.InnerText += naviHide.Value;

                if (hidden != "1" && deleted !="1")
                {
                    topNavigation.Controls.Add(li);
                    var anchor = new HyperLink();
                    var title= child.GetProperty("title");
                    //anchor.Text=child.Id.ToString();
                    if (!string.IsNullOrWhiteSpace(title.Value))
                       span.InnerHtml = title.Value;
                    else
                    {
                        var name = child.Name.Split('_');
                        span.InnerHtml = name[1];
                    }

                    if (child.Id == Node.GetCurrent().Id)
                        li.Attributes.Add("class", "current");

                        anchor.CssClass = "navigation";
                    if (!host.Contains("testcms"))
                    {
                        if (!string.IsNullOrWhiteSpace(child.GetProperty("umbracoUrlAlias").Value))
                            anchor.NavigateUrl = "/"+child.GetProperty("umbracoUrlAlias").Value;
                        else
                            anchor.NavigateUrl = child.NiceUrl;

                    }
                    else
                    {
                        var id = "/" + child.Id.ToString();

                        anchor.NavigateUrl = id;
                        //anchor.NavigateUrl=anchor.NavigateUrl.Replace("usercontrols", "");
                    }
                    anchor.Controls.Add(span);
                       li.Controls.Add(anchor);
                }
            }

有没有办法通过这个函数中提取的 sortOrder 值对列表项进行排序?目前我正在通过 javascript 对其进行重新排序,但在某些使用它的地方无法使用 javascript。

【问题讨论】:

  • 每个孩子的排序顺序是否相同?或者换一种方式,如果不同孩子的排序顺序不同会发生什么。
  • 不,他们没有。但要获得排序顺序,我必须通过 getproperty 函数进入子节点。我在列表项内的每个锚标记中设置跨度中每个排序顺序的值。
  • 如果您有不同的排序顺序,那么我不清楚您希望列表如何排序。您能否举一个数据示例、可能的排序顺序以及您希望列表如何结束?还是排序顺序是一个值,指示项目在哪个位置?
  • 我遇到的问题是如何通过子节点中的属性对前端的列表进行重新排序。在它通过并将它们添加到列表之后,排序顺序值位于每个列表项的范围内。我只是不确定如何在创建后重新排序列表。
  • 排序顺序是我希望项目所在的位置,但目前无法按这些值对列表进行排序

标签: c# asp.net list


【解决方案1】:

我将假设您有某种类型的外部元素,您要向其中添加 li 实例。在这种情况下,您只需要将对象构建到不同的列表中,然后在添加到外部对象之前对其进行排序。您需要为 SelectOrderBy 方法引入 LINQ 命名空间。

using System.Linq;

// Holder for the data coming out of your internal for each converted
// to a transformation function
class ListNode
{
   // or whatever comparable type your sort order is
   int SortOrder {get;set;}
   HttpGenericControl Li {get; set;}
}

// Convert function is your code inside the foreach returning the
// HttpGenericControl li from each loop same code except for the return
ListNode ConvertChildToLi(ChildClass child) 
{
    // Same code here to the end of the for loop
    return new ListNode { SortOrder = sortOrder, Li = li };
}

然后在你的调用函数中

var liControls = children.Select(ConvertChildToLi).OrderBy(n=> n.SortOrder);
foreach(var li in liControls) 
{
   // Assuming outer element ul exists
   ul.Controls.Add(li);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多