【问题标题】:How to access model property in Razor view of IEnumerable Type?如何在 IEnumerable 类型的 Razor 视图中访问模型属性?
【发布时间】:2012-01-28 22:33:46
【问题描述】:

如何在不使用循环的情况下访问 IEnumerable 类型的 Razor 视图中的模型属性(如 @Html.EditorFor(x=>Model.Name))?即,如果将视图强类型化到某个模型,将模型作为列表。
例如。

@model IEnumerable<EFTest2.DAL.package_master>


那么是否可以在不使用 foreach 循环的情况下显示 TestBoxFor 或 EditorFor(创建新模型)Html 帮助器。???

【问题讨论】:

  • 你仍然需要遍历所有的集合,因此它被称为“列表”。
  • 您可以编写自己的扩展方法(用于 HTML),仅当您在许多地方使用时才能吐出 html

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

当某些模型属性的类型为IEnumerable&lt;SomeType&gt; 时,您通常会定义一个编辑器/显示模板(~/Views/Shared/EditorTemplates/SomeType.cshtml~/Views/Shared/DisplayTemplates/SomeType.cshtml)。该模板将为集合的每个元素自动呈现,因此您无需编写循环:

@Html.EditorFor(x => x.SomeCollection)

在模板中,您将能够访问各个属性:

@model SomeType
@Html.EditorFor(x => x.Name)
...

现在,如果您绝对需要直接访问强类型为IEnumerable&lt;SomeType&gt; 的视图中的某些元素,您最好使用其他一些集合类型,例如IList&lt;SomeType&gt;SomeType[] 作为视图模型,这将为您提供直接通过索引访问元素,您将能够执行此操作,例如访问集合的第 6 个元素:

@model IList<SomeType>
@Html.EditorFor(x => x[5].Name)

【讨论】:

    【解决方案2】:

    所以基本上你提到的类型是 List 等。

    如果您想将值添加到从表单字段接受用户输入的列表中,然后添加到模型中的现有列表中。最简单但不那么优雅的方法是

    假设你有类“Person”,然后在你的模型中列出。首先创建一个具有空 person 实例的 person 实例,将其添加到列表中,然后将最后一个列表项绑定到您的编辑中。

    @{
        Person contact = new Person(); //Empty person instance
        PersonList.Add(contact);
         } 
    

    稍后将其绑定到您的个人字段

     @Html.TextBoxFor(m => m.PersonList[PersonList.Count - 1].PrimaryContacts.FirstName)
    

    这适用于模型属性的验证以及在每次提交表单后,您只需添加新人即可。 但如果表单被取消,请注意编写删除代码。

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多