MVC OrderBy EditorFor IEnumerable

时间:2012-03-16 14:45:28

标签: asp.net-mvc-3 ienumerable editorfor asp.net-mvc-partialview

我刚刚注册,这是我的第一篇文章,所以如果问题不是最好,请耐心等待。我看了一下,找不到符合我要求的答案;这可能是因为我无法实现我想要的目标。

我有一个局部视图,它从视图模型中提取了一个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,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#来说也是如此;这个项目让我在飞行中学习语言,所以请玩得好:)

谢谢,

标记

1 个答案:

答案 0 :(得分:5)

您应该在控制器操作中执行此操作,该操作负责检索视图模型并将其传递给视图。

您可以随时在视图中执行以下恐怖行为:

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

但保证我不会这样做。