Using a DisplayTemplate (with DisplayFor) for each item in a collection

主宰稳场 提交于 2019-11-27 21:15:11

Instead of having a view that take an IEnumerable<Comment> and that all it does is loop through the collection and call the proper display template simply:

@Html.DisplayFor(x => x.Comments)

where the Comments property is an IEnumerable<Comment> which will automatically do the looping and render the Comment.cshtml display template for each item of this collection.

Or if you really need such a view (don't know why) you could simply:

@model IEnumerable<Comment>
@Html.DisplayForModel()

As far as the Where clause you are using in there you should simply remove it and delegate this task to the controller. It's the controller's responsibility to prepare the view model, not the view performing such tasks.

While the accepted answer works well most of the time, there are other cases in which we need to be aware of the element's index when rendering (i.e. add custom javascript that generates references to each element based on their index).

In that case, DisplayFor can still be used within the loop like this:

@model IEnumerable<Comment>

@for (int index = 0; index < Model.Count(); index++)
{
     @Html.DisplayFor(model => model[index])
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!