2

방금 ​​등록한 사람이며,이 사람이 내 첫 번째 게시물이기 때문에 질문이 최선이 아니라면 나와 함께하시기 바랍니다. 나는 대략 가지고 있고 나의 필요 조건을 적응시키는 응답을 찾아 낼 수 없다; 이것은 내가 원하는 것을 성취 할 수 없기 때문일 것입니다. MVC OrderBy EditorFor IEnumerable

는 I는 뷰 모델에서 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. 

를 I 해요 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