2013-09-16 36 views
3

我有一個名爲numeric的Umbraco文檔類型的屬性,名爲position(見下文)。Umbraco Razor orderby數字屬性

@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數字,但我似乎無法改變爲了整型而不是基於字符串的。

關於我要去哪裏的任何想法都是錯誤的?

+0

對不起,更新! –

回答

-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") 
    } 
} 

Pad Left >>>

+0

我不認爲即使編譯。 – Digbyswift

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()) 
    { 
     ... 
    } 
} 
+0

然後我得到這個錯誤:'CS0246:無法找到類型或命名空間名'DynamicNodeList'(你是否缺少using指令或程序集引用?)'。我需要另一個命名空間嗎? –

+1

是的道歉,你需要'@using umbraco.MacroEngines' – Digbyswift

+0

謝謝,但我現在有一個錯誤,指出這種類型不能支持「where」子句:'CS1928:'umbraco.MacroEngines.DynamicNodeList'不包含'Where''的定義 - 這對DynamicNodeList不可行嗎? –