如何在不使用循环的情况下访问IEnumerable类型的Razor视图中的Model属性(如@Html.EditorFor(x=>Model.Name)
)?I.e如果视图被强类型化为某个模型保持模型作为LIST。
例如。
@model IEnumerable<EFTest2.DAL.package_master>
那么是否可以在不使用foreach循环的情况下显示TestBoxFor或EditorFor(创建新模型)Html助手。???
答案 0 :(得分:2)
当某个模型属性的类型为IEnumerable<SomeType>
时,您通常会定义一个编辑器/显示模板(~/Views/Shared/EditorTemplates/SomeType.cshtml
或~/Views/Shared/DisplayTemplates/SomeType.cshtml
)。将为集合的每个元素自动呈现此模板,以便您不需要编写循环:
@Html.EditorFor(x => x.SomeCollection)
在模板内部,您将能够访问各个属性:
@model SomeType
@Html.EditorFor(x => x.Name)
...
现在,如果您绝对需要直接访问强类型为IEnumerable<SomeType>
的视图中的某个元素,则最好使用其他集合类型,例如IList<SomeType>
或SomeType[]
作为视图这个模型可以让你通过索引直接访问元素,你可以这样做,例如访问集合的第6个元素:
@model IList<SomeType>
@Html.EditorFor(x => x[5].Name)
答案 1 :(得分:0)
所以基本上你提到了List等类型。
如果要将值添加到接受来自表单字段的用户输入的列表,然后添加到模型中的现有列表。
是最容易但不那么优雅的方式假设您有“Person”类,然后在模型中使用List。首先创建一个具有空人实例的人的实例,将其添加到列表中,然后将最后一个列表项绑定到编辑中。
@{
Person contact = new Person(); //Empty person instance
PersonList.Add(contact);
}
稍后将此绑定到您的感应字段
@Html.TextBoxFor(m => m.PersonList[PersonList.Count - 1].PrimaryContacts.FirstName)
这适用于模型属性的验证以及每个表单提交之后,对于下一个包含,您只需添加新人。 但如果表单被取消,请注意删除代码。