ek_*_*_ny 1 razor asp.net-mvc-3
<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>
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎有点过于冗长......有没有办法绕过创建计数器而不得不求助于循环标准?
这对我来说似乎有点过于冗长......有没有办法绕过创建计数器而不得不求助于循环标准?
是的,对我来说似乎也太冗长了.如果使用编辑器模板,即使循环看起来也太冗长了,因为你不需要它.
<ul>
@Html.EditorFor(x => x.PhoneNumberEntries)
</ul>
Run Code Online (Sandbox Code Playgroud)
然后显然你会定义一个自动为PhoneNumberEntries集合的每个元素呈现的自定义编辑器模板(~/Views/Shared/EditorTemplates/PhoneNumberEntry.cshtml):
@model PhoneNumberEntry
<li>
<span>@Model.PhoneNumber</span>
@Html.EditorFor(m => m.PhoneNumber)
</li>
Run Code Online (Sandbox Code Playgroud)
您甚至不需要编写循环,因为模板按惯例工作.
请注意,编辑器模板的名称和位置很重要.~/Views/Shared/EditorTemplates如果要在属于应用程序中不同控制器的视图之间共享此模板,它应位于内部,并且它是ASP.NET MVC首先查找它的位置.或者,你也可以将其放在~/Views/XXX/EditorTemplates哪里XXX是当前控制器的名称.然后,编辑器模板的名称必须是用作集合属性的agrument的类型的名称.
因此,如果您没有主视图模型:
public IEnumerable<FooBarViewModel> FooBars { get; set; }
Run Code Online (Sandbox Code Playgroud)
相应模板的名称将是,FooBarViewModel.cshtml并且显然它将被强类型化FooBarViewModel.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |