<ul>
@{int i=0;}
@foreach (var entry in Model.PhoneNumberEntries)
{
<li>
<span>@entry.PhoneNumber<span>
@Html.TextBoxFor(m=>Model.PhoneNumberEntries[i].PhoneNumber)</li>
i++;
}
</ul>
这对我来说似乎有点过于冗长......有没有办法绕过创建计数器而不得不求助于循环标准?
答案 0 :(得分:6)
这对我来说似乎有点过于冗长......有没有办法绕行 创建计数器,不得不求助于循环标准?
是的,我似乎也太啰嗦了。如果使用编辑器模板,即使循环看起来也太冗长了,因为你不需要它。
<ul>
@Html.EditorFor(x => x.PhoneNumberEntries)
</ul>
然后显然你会定义一个自动为PhoneNumberEntries
集合(~/Views/Shared/EditorTemplates/PhoneNumberEntry.cshtml
)的每个元素呈现的自定义编辑器模板:
@model PhoneNumberEntry
<li>
<span>@Model.PhoneNumber</span>
@Html.EditorFor(m => m.PhoneNumber)
</li>
您甚至不需要编写循环,因为模板按惯例工作。
请注意,编辑器模板的名称和位置很重要。如果要在属于应用程序中不同控制器的视图之间共享此模板,它应位于~/Views/Shared/EditorTemplates
内,并且它是ASP.NET MVC首先查找它的位置。或者您也可以将其放在~/Views/XXX/EditorTemplates
内,其中XXX
是当前控制器的名称。然后,编辑器模板的名称必须是用作集合属性的agrument类型的名称。
因此,如果您没有主视图模型:
public IEnumerable<FooBarViewModel> FooBars { get; set; }
相应模板的名称为FooBarViewModel.cshtml
,显然会强烈输入FooBarViewModel
。
答案 1 :(得分:2)
试试这个:
<ul>
@for (int i=0; i++; i < Model.PhoneNumberEntries.Count)
{
<li>@Html.TextBoxFor(m=>Model.PhoneNumberEntries[i].PhoneNumber)</li>
}
</ul>