asp.net-mvc-3 - MVC OrderBy Editor对于 IEnumerable

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

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

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

两个 View 模型中都有大量其他对象,我因与这个问题无关而忽略了它们。 DocumentMetadataFieldViewModel 由多个标准类型的字段(int、字符串等)组成

我想要实现的是将 OrderBy 添加到通过底部 View 模型中的对象排序而拉回的列表中,如下所示:

@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# 也很陌生;这个项目让我快速学习了这门语言,所以请玩得开心:)

谢谢

标记

最佳答案

您应该在 Controller 操作中执行此排序,该操作负责检索 View 模型并将它们传递给 View 。

你总是可以在你看来做出以下恐怖的事情:

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

但答应我你不会那样做。

关于asp.net-mvc-3 - MVC OrderBy Editor对于 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9739389/

相关文章:

c# - 将域名附加到编辑器的电子邮件中

asp.net-mvc - 带有 .NET MVC 3 Razor Editor 的 Html5 占位符用于扩展?

c# - 将 Lambda 表达式树与 IEnumerable 结合使用

c# - 有条件地平均 DataTable 中的一列数据

c# - 为什么使用只读IEnumerable <T>

asp.net-mvc-3 - 使用从 ViewModel 和 html 类属性设置的日期格式的输入

C# MVC 3/jQuery 预览按钮 CMS

c# - DateTimeOffset 格式化

c# - jQuery.ajax() 发送的空值绑定(bind)到模型中的 "null"字段

javascript - 页面重新加载后 css 类处于事件状态