3

我在名为 position 的 Umbraco 文档类型中有一个属性numeric(见下文)。

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
  var results = CurrentPage.Children(); 
}

@foreach(var result in results.OrderBy("position"))
{
  @result.position
}

我期待看到1, 2, 3, 4 ... 11, 12...

然而,我实际上看到1, 11, 12, 2, 3, 4...

position 属性在 Umbraco 中设置为数字,但我似乎无法将顺序更改为基于整数而不是基于字符串。

关于我哪里出错的任何想法?

4

2 回答 2

2

它实际上按预期工作。尽管您的字段是数字字段,但通过动态属性访问的任何值CurrentPage都将被视为字符串值(如果存在)。

您可以致电:

@using umbraco.MacroEngines
@inherits UmbracoTemplatePage

@{
    var results = ((DynamicNodeList)this.CurrentPage.ChildrenAsList);

    foreach(var result in results.OrderBy(x => x.Position())
    {
        ...
    }
}

这会将子项转换为强类型列表对象,然后您可以对其执行 LINQ。

更新:

如果您使用的是更高版本,您也可以使用它:

@inherits UmbracoTemplatePage

@{
    var results = this.Model.Content.Children;

    foreach(var result in results.OrderBy(x => x.Position())
    {
        ...
    }
}
于 2013-09-16T16:54:25.770 回答
-2

这是因为数字是按第一个 # 排序的,因此1, 11, 12, 2, 3, 4... 您可以尝试在该位置的左侧添加一个填充,如果您不担心丢失动态属性,您可以尝试以下操作;

@{
    var results = Model.Content.Children();  

    foreach(var result in results.OrderBy(x => x.position.ToString().PadLeft(3,'0')))
    {
        @result.GetPropertyValue("position")
    } 
}

垫左 >>>

于 2013-09-16T16:52:24.340 回答