Jim*_*Jim 6 indexing ienumerable controls asp.net-mvc-3
我有一个带有displaytemplate的mvc页面.如何获取在displaytemplate中呈现的当前项的索引.它在name属性中生成正确的可绑定结果.
<input name="xxx[0].FirstName"/>
<input name="xxx[1].FirstName"/>
Run Code Online (Sandbox Code Playgroud)
我想在显示模板中使用该索引值.它在ViewContext中的某个地方吗?
@*page.cshtml @@model ... @ property Contacts是IEnumerable*@
<table id="contacts" class="editable">
<thead>
<tr><th>Name</th><th>Surname</th><th>Contact Details</th></tr>
</thead>
<tbody>
@Html.DisplayFor(x => x.Contacts)
</tbody>
Run Code Online (Sandbox Code Playgroud)
在我们的显示模板中
@* contact.cshtml *@
@model ...@* This is the T of the IEnumerable<T> *@
<tr>
@* I NEED THE INDEX OF THE CURRENT ITERATION HERE *@
<td>@Html.DisplayFor(x => x.FirstName)</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 13
恐怕没有简单的方法来获取索引.它隐藏在内部System.Web.Mvc.Html.DefaultDisplayTemplates.CollectionTemplate方法内部而不会暴露.您可以使用的是字段前缀:
@ViewData.TemplateInfo.HtmlFieldPrefix
Run Code Online (Sandbox Code Playgroud)
另一种可能性是替换@Html.DisplayFor(x => x.Contacts)为:
@for (int i = 0; i < Model.Contacts.Length; i++)
{
@Html.DisplayFor(x => x.Contacts[i], new { Index = i })
}
Run Code Online (Sandbox Code Playgroud)
然后在模板内部@ViewBag.Index应该给你当前的索引,但我必须承认它有点难看.
| 归档时间: |
|
| 查看次数: |
4357 次 |
| 最近记录: |