我有一个Razor视图,它迭代视图模型上的集合属性,以及该集合上单个项目的显示模板。在那个单项中,我再次做同样的事情,所以在引擎盖下我有嵌套循环,在页面上多次渲染相同类型的实例。
在叶子类型的显示模板中,我想知道已经向页面呈现了多少相似的项目。
我尝试向ViewBag
添加一个属性,并在每次迭代时递增它,但这不起作用。
模型
public class FooViewModel
{
public IEnumerable<Bar> Bars { get; set; }
}
public class BarViewModel
{
public IEnumerable<Baz> Bazes { get; set; } // how do you pluralize baz?
}
public class BazViewModel
{
}
Index.cshtml
@model FooViewModel
@{
ViewBag.RenderCount = 0;
}
@Html.DisplayFor(m => m.Bars);
DisplayTemplates / BarViewModel.cshtml
@model BarViewModel
@Html.DisplayFor(m => m.Bazes);
DisplayTemplates / BazViewModel.cshtml
@model BazViewModel
// how many BazViewModels have been rendered before this one?
@ViewBag.RenderCount // is 0 every time
@{
ViewBag.RenderCount++;
}
答案 0 :(得分:0)
正如Liam在评论中所建议的那样,我最终将此处理转移到Controller中(或者实际上,从我的数据实体到视图模型的映射)。这需要将一个属性添加到我需要计数的视图模型中,并将该属性设置为映射过程的一部分。