【发布时间】:2015-07-29 09:04:03
【问题描述】:
我有一个类,它包含一个属性作为另一个对象的列表
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]”。
我正在向编辑器模板传递一个 List 类型的属性,那么为什么它将它作为单个 Item 类型获取?
在项目模板中,我需要显示一个标题,它告诉列表中项目的索引。例如:
<h3>Item 1</h3>
@Html.TextBoxFor(x => x.ItemSetting })
对于下一个项目:
<h3>Item 2</h3>
@Html.TextBoxFor(x => x.ItemSetting })
(记住我在 MyObject 构造函数中创建了 2 个空项)
如果我只在项目模板中显示一个项目,我如何获得相关索引?
【问题讨论】:
-
我假设您的意思是它的
public class TemperatureItem基于您在视图中显示的模型?您的模板是否命名为Item.cshtml并位于/View/Shared/EditorTemplates文件夹中? -
还要注意,
EditorFor()接受IEnumerable<T>所以你的EditorTemplate应该是@model Web.Models.Item(不是IEnumerable<Web.Models.Item>- 该方法足够聪明,可以为基于集合中的每个项目生成 html在模板中的html上 -
你传递给你的视图是什么,是
MyObject还是Item的列表? -
如何将模型从一个视图传递到另一个视图?
-
@Coulton 抱歉,我在问题代码中犯了一个错误,现在已修复 - 我有显示项目列表编辑器的 MyObject 视图,因此调用了项目模板
标签: asp.net-mvc list ienumerable mvc-editor-templates editorfor