2

我刚刚注册,这是我的第一篇文章,所以如果问题不是最好的,请多多包涵。我看了看,找不到适合我要求的答案;这可能是因为无法实现我想要的。

我有一个部分视图,它从视图模型中提取 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;
        }
}

在这两个视图模型中,我忽略了很多其他对象,因为它们与这个问题无关。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# 也很陌生;这个项目让我在飞行中学习了语言,所以请玩好 :)

谢谢,

标记

4

1 回答 1

5

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

您总是可以在您的视野中执行以下恐怖操作:

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

但答应我你不会那样做。

于 2012-03-16T14:48:04.167 回答