加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

controls – mvc显示模板中当前项的索引

发布时间:2020-12-16 04:01:31 所属栏目:asp.Net 来源:网络整理
导读:我有一个带有displaytemplate的mvc页面. 如何获取在displaytemplate中呈现的当前项的索引. 它在name属性中生成正确的可绑定结果. input name="xxx[0].FirstName"/input name="xxx[1].FirstName"/ 我想在显示模板中使用该索引值.它在ViewContext中的某个地方
我有一个带有displaytemplate的mvc页面.
如何获取在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内部应该给你当前索引,但我必须承认它有点难看.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读