使用Razor在MVC视图中引用集合内的属性

时间:2013-02-15 16:49:15

标签: asp.net-mvc razor

我有一个看起来像这样的模型:

public class MyClass {
   public string Id { get; set; }
   public List<SubItem> SubItems { get; set; }
}

public class SubItem {
   public string Key { get; set; }
   public string Value { get; set; }
}

在我看来,我想将表单数据提交给MyClass,因此我可以创建一个MyClass对象。它看起来像这样:

@model Models.MyClass

@using (Html.BeginForm()){

<div>
   @Html.DisplayFor(model => model.Id): @Html.EditorFor(model => model.Id)
</div>
<div>
   @Html.DisplayFor(model => ???): @Html.EditorFor( ??? )
</div>

<input type="submit" value="create"/>
}

你看到我怀疑的问号(???)。如何添加到此集合中?我知道它是各种各样的子形式,但是如何在没有太多复杂性的情况下做到这一点。如果我需要显示项目,我会做一个foreach(Model.SubItems中的var项目){...}。但这是不同的。我该如何处理?

1 个答案:

答案 0 :(得分:2)

与单独显示每个项目完全没什么不同:

@for (int i=0; i<Model.SubItems.Length; i++)
{
    <div>
        @Html.DisplayFor(m => m.SubItems[i].Key): @Html.EditorFor(m => m.SubItems[i].Key)
    </div>
    <div>
        @Html.DisplayFor(m => m.SubItems[i].Value): @Html.EditorFor(m => m.SubItems[i].Value)
    </div>
}

<强>更新

更改上面的代码以确保正确生成名称和索引值。此外,这也将适用于没有初始项目的场景。只需将i<Model.SubItems.Length条件更改为i<3,或者您想要的任何迭代次数。