如何访问IEnumerable类型的剃刀视图中的模型属性?

如何访问IEnumerable类型的剃刀视图中的模型属性?

问题描述:

如何在不使用循环的情况下访问IEnumerable类型的Razor视图中的Model属性(如@Html.EditorFor(x=>Model.Name))I.e如果某个视图强制类型化为某个Model保持模型作为LIST。例如:
如何访问IEnumerable类型的剃刀视图中的模型属性?

@model IEnumerable<EFTest2.DAL.package_master> 


然后是能够显示TestBoxFor或EditorFor不使用foreach循环(以创建新的模型)HTML帮手。???

+0

你仍然需要遍历所有的集合,因此它被称为“列表”。 – IamStalker 2011-12-28 05:34:40

+0

只有当你在很多地方使用时,你才可以编写自己的扩展方法(用于HTML)来吐出html – Anand 2011-12-28 08:07:18

当某些模型属性的类型为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) 

这对验证工作良好的模特属性每一个表单提交的孔和后也,未来列入你只需要添加新的人。 但如果表单被取消,请小心编写删除代码。