我有一个类,其中包含一个属性作为另一个对象的列表
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)
}
但是我收到了一个错误:
传递到字典中的模型项是类型的 'Web.Models.MyObject',但这个字典需要一个模型项 输入'System.Collections.Generic.IEnumerable`1 [Web.Models.Item]'。
我正在向编辑器模板传递一个属性类型的属性,为什么它将它作为单个Item类型?
在Item模板中,我需要显示一个标题,告诉List中项目的索引。例如:
<h3>Item 1</h3>
@Html.TextBoxFor(x => x.ItemSetting })
以及下一个项目:
<h3>Item 2</h3>
@Html.TextBoxFor(x => x.ItemSetting })
(记得我在MyObject构造函数中创建了2个空项目)
如果我只在Item模板中显示一个项目,那么我是否会获得相关索引?
答案 0 :(得分:2)
您收到此错误的原因是您的模型的值为null
(因此model.Items
为null
)因此默认情况下,它会将主模型传递给模板。您需要确保将模型的实例传递给GET方法中的视图。
但是主视图中的方法应该是
@model Web.Models.Item
不是@model IEnumerable<Web.Models.Item>
。该方法接受IEnumerable<T>
并且足够聪明,可以根据模板中的html为集合中的每个项生成html
答案 1 :(得分:0)
您遇到此错误的原因是您的控制器和视图未传递相同类型的对象。可能你的观点是传递@model Web.Models.Items 以及你需要传递什么才能显示&#34;项目列表&#34; @model Enumerable