有没有办法在剃刀显示模板的实例之间共享数据?

时间:2017-08-09 14:33:46

标签: asp.net-mvc razor

我有一个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++;
}

1 个答案:

答案 0 :(得分:0)

正如Liam在评论中所建议的那样,我最终将此处理转移到Controller中(或者实际上,从我的数据实体到视图模型的映射)。这需要将一个属性添加到我需要计数的视图模型中,并将该属性设置为映射过程的一部分。