EditorFor 用于列表视图错误

EditorFor for list view error

我有一个 class,其中包含一个 属性 作为另一个 object

的列表
public class MyObject {
    public MyObject()
    {
        this.Items = new List<Item>
                                {
                                    new Item(),
                                    new Item()
                                };
    }

    public List<Item> Items { get; set; }
    }
}

public class Item
{
    public double ItemSetting { get; set; }

    [CompareIf("ItemSetting", Operator.LessThanOrEqual, ErrorMessageResourceType = typeof(UiResources), ErrorMessageResourceName = "ItemMinError")]
    public double ItemMin { get; set; }
}

我正在尝试在模板中显示列表:

@model IEnumerable<Web.Models.Item>
@{
}

通过:

@model Web.Models.MyObject
@{
    @Html.EditorFor(x => x.Items)
}

但我收到一个错误:

The model item passed into the dictionary is of type 'Web.Models.MyObject', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[Web.Models.Item]'.

我正在向编辑器模板传递一个 属性,它是一种列表类型,那么为什么它将它作为单个项目类型获取呢?

在项目模板中,我需要显示一个标题,它告诉列表中项目的索引。例如:

<h3>Item 1</h3>
@Html.TextBoxFor(x => x.ItemSetting })

下一项:

<h3>Item 2</h3>
@Html.TextBoxFor(x => x.ItemSetting })

(记住我在 MyObject 构造函数中创建了 2 个空项)

如果我只在项目模板中显示一个项目,我如何获得相关索引?

您收到此错误的原因是您的模型的值为 null(因此 model.Itemsnull),因此默认情况下,它将主模型传递给模板。您需要确保在 GET 方法中将模型的实例传递给视图。

但是你在主视图中的方法应该是

@model Web.Models.Item

不是@model IEnumerable<Web.Models.Item>。该方法接受 IEnumerable<T> 并且足够聪明,可以根据模板

中的 html 为集合中的每个项目生成 html

出现该错误的原因是您的控制器和视图没有传递相同类型的对象。可能您的视图正在传递 @model Web.Models.Items 并且您需要传递以显示 "items" 列表的内容是 @model Enumerable