Umbraco Razor orderby numeric property
本文关键字:property numeric orderby Razor Umbraco | 更新日期: 2023-09-27 18:31:38
我在 Umbraco 文档类型中有一个属性,称为 position 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...
位置属性在 Umbraco 中设置为数字,但我似乎无法将顺序更改为基于整数而不是基于字符串。
关于我哪里出错了有什么想法吗?
它实际上按预期工作。尽管字段是数值字段,但通过动态属性(如 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())
{
...
}
}
这是因为数字是按第一个#排序的,因此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")
}
}
垫左>>>