2

私はちょうど登録しました。これは私の最初の投稿ですので、質問が最善でない場合は私にご負担ください。私は見て、私の要件に合った答えを見つけることができませんでした。これはおそらく私が望むものを達成することができないからです。MVC OrderBy EditorFor IEnumerable

IがのviewmodelからEditorForフィールドのIEnumerableをリストを通して引っ張る部分図を有する:

@model DocumentViewModelContainer 
@Html.EditorFor(m => m.Document.Metadata) 

DocumentViewModelContainer次のコードを持っている:

public class DocumentViewModelContainer 
{ 
    public DocumentViewModel Document 
    { 
     get; 
     set; 
    } 

DocumentViewModelは、以下のコードを有します。

public class DocumentViewModel 
{ 
    public IEnumerable<DocumentMetadataFieldViewModel> Metadata 
     { 
      get; 
      set; 
     } 
} 

boにはたくさんのオブジェクトがあります私がこの質問に無関係なものとして省いたビューモデルです。 DocumentMetadataFieldViewModelは、標準タイプ(int、stringsなど)のいくつかのフィールドで構成されています

私が達成しようとしているのは、このリストにOrderByを追加することです。次のように:

@model DocumentViewModelContainer 
@Html.EditorFor(m => m.Document.Metadata.OrderBy(i => i.InstanceFieldOrder)) 

をただし、これはエラーを与える:

System.InvalidOperationException : Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. 

は私だけではなく、MVCのが、C#、一般的に非常に新しいです。このプロジェクトは、私はとても素敵:)

おかげで、

マーク

答えて

5

を果たしてくださいあなたはあなたのビューモデルを取得する責任があり、あなたのコントローラのアクションで、この順序付けを行う必要があり、その場で言語を学ぶ持っていましたそれらをビューに渡します。

@model DocumentViewModelContainer 
@{ 
    Model.Document.Metadata = Document.Metadata.OrderBy(i => i.InstanceFieldOrder).ToList(); 
} 
@Html.EditorFor(m => m.Document.Metadata) 

をしかし、あなたはそれをしない私に約束:

あなたは常にあなたのビューで、次の恐怖を行うことができます。

+0

ああ、あなたの解決策はうまくいきます、私はすでにそれをチェックしていれば私は悪い人ですか? )Model.Document.Metadata = Model.Document.Metadata.OrderBy(i => i.InstanceMetadataTemplateId).ThenBy(i => i.InstanceFieldOrder).ToList(); – Mark

+0

言及を忘れていました - 迅速で正確な対応のおかげで、ありがとう! :) – Mark

関連する問題