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.Items
为 null
),因此默认情况下,它将主模型传递给模板。您需要确保在 GET 方法中将模型的实例传递给视图。
但是你在主视图中的方法应该是
@model Web.Models.Item
不是@model IEnumerable<Web.Models.Item>
。该方法接受 IEnumerable<T>
并且足够聪明,可以根据模板
中的 html 为集合中的每个项目生成 html
出现该错误的原因是您的控制器和视图没有传递相同类型的对象。可能您的视图正在传递 @model Web.Models.Items 并且您需要传递以显示 "items" 列表的内容是 @model Enumerable
我有一个 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.Items
为 null
),因此默认情况下,它将主模型传递给模板。您需要确保在 GET 方法中将模型的实例传递给视图。
但是你在主视图中的方法应该是
@model Web.Models.Item
不是@model IEnumerable<Web.Models.Item>
。该方法接受 IEnumerable<T>
并且足够聪明,可以根据模板
出现该错误的原因是您的控制器和视图没有传递相同类型的对象。可能您的视图正在传递 @model Web.Models.Items 并且您需要传递以显示 "items" 列表的内容是 @model Enumerable