3

呼び出された位置の 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...

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 に答える