如何访问IEnumerable类型的剃刀视图中的模型属性?
如何在不使用循环的情况下访问IEnumerable类型的Razor视图中的Model属性(如@Html.EditorFor(x=>Model.Name)
)I.e如果某个视图强制类型化为某个Model保持模型作为LIST。例如:
如何访问IEnumerable类型的剃刀视图中的模型属性?
@model IEnumerable<EFTest2.DAL.package_master>
然后是能够显示TestBoxFor或EditorFor不使用foreach循环(以创建新的模型)HTML帮手。???
当某些模型属性的类型为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[]
作为视图模型,这将允许您按索引直接访问元素,并且您将能够做到这一点,例如访问第六届eleme收集的NT:
@model IList<SomeType>
@Html.EditorFor(x => x[5].Name)
所以基本上你提的类型列表等
如果你想要将其值添加到列表中接受来自用户从表单字段输入,然后添加到现有列表模型。最简单但不那么优雅的方式将是
假设你有类“Person”,然后列出你的模型。首先创建一个将有空人实例的人的实例,将其添加到列表中,然后将最后一个列表项绑定到您的编辑。
@{
Person contact = new Person(); //Empty person instance
PersonList.Add(contact);
}
以后绑定给你的induvidual领域
@Html.TextBoxFor(m => m.PersonList[PersonList.Count - 1].PrimaryContacts.FirstName)
这对验证工作良好的模特属性每一个表单提交的孔和后也,未来列入你只需要添加新的人。 但如果表单被取消,请小心编写删除代码。
你仍然需要遍历所有的集合,因此它被称为“列表”。 – IamStalker 2011-12-28 05:34:40
只有当你在很多地方使用时,你才可以编写自己的扩展方法(用于HTML)来吐出html – Anand 2011-12-28 08:07:18