我有一个带有displaytemplate的mvc页面.
如何获取在displaytemplate中呈现的当前项的索引.
它在name属性中生成正确的可绑定结果.
如何获取在displaytemplate中呈现的当前项的索引.
它在name属性中生成正确的可绑定结果.
<input name="xxx[0].FirstName"/> <input name="xxx[1].FirstName"/>
我想在显示模板中使用该索引值.它在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>
在我们的显示模板中
@* 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>
解决方法
恐怕没有简单的方法来获取索引.它隐藏在内部System.Web.Mvc.Html.DefaultDisplayTemplates.CollectionTemplate方法中,并且未公开.您可以使用的是字段前缀:
@ViewData.TemplateInfo.HtmlFieldPrefix
另一种可能性是用以下代码替换@ Html.DisplayFor(x => x.Contacts):
@for (int i = 0; i < Model.Contacts.Length; i++) { @Html.DisplayFor(x => x.Contacts[i],new { Index = i }) }
然后在模板@ ViewBag.Index内部应该给你当前索引,但我必须承认它有点难看.