MVC OrderBy Editor для IEnumerable - PullRequest
       11

MVC OrderBy Editor для IEnumerable

2 голосов
/ 16 марта 2012

Я только что зарегистрировался, и это мой первый пост, поэтому, пожалуйста, потерпите меня, если вопрос не самый лучший. Я посмотрел и не могу найти ответ, который соответствует моим требованиям; возможно, это потому, что невозможно достичь того, чего я хочу.

У меня есть частичное представление, которое просматривает список IEnumerable полей EditorFor из модели представления:

@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;
        }
}

В обеих моделях представлений есть масса других объектов, которые я не упомянул в этом вопросе. DocumentMetadataFieldViewModel состоит из нескольких полей стандартных типов (int, строки и т. Д.)

То, чего я пытаюсь добиться, - это добавить 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 # в целом; В этом проекте я выучил язык на лету, поэтому, пожалуйста, играйте хорошо:)

Спасибо

Mark

1 Ответ

5 голосов
/ 16 марта 2012

Вы должны выполнить этот порядок действий в вашем контроллере, который отвечает за получение моделей вашего представления и передачу их в представление.

Вы всегда можете выполнить следующий ужас на ваш взгляд:

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

но пообещай мне, что ты этого не сделаешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...