剃刀:在循环中添加变量而不显示它

sus*_*ite 9 c# foreach loops razor asp.net-mvc-3

嗨我想知道如何在foreach循环expamle中添加数字而不显示它们:

@{ int intVariable = 0; }

@foreach(var item in @Model.Collection)
{
    @(intVariable += item.MyNumberOfInteres) //->how can I calculate this without it being rendered to the website ?

    //some Html code.......
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

欢呼
sushiBite

Dar*_*rov 19

用括号替换括号并添加一个尾随分号:

@(intVariable += item.MyNumberOfInteres)
Run Code Online (Sandbox Code Playgroud)

变为:

@{ intVariable += item.MyNumberOfInteres; }
Run Code Online (Sandbox Code Playgroud)

这就是说你不应该在视图中做这样的事情.如果您需要这样做,这只是意味着您的视图模型不适合您的视图.所以适应它.这种信息应该直接集成在视图模型中并在控制器中计算.

请记住:视图仅用于显示以视图模型的形式从控制器传递的数据.如果视图开始计算变量和填充它不再类似于视图而是意大利面条代码.

  • 当然,但这个答案是不正确的.Dan Diplo的答案是正确的.Rory,当你开始循环时,你处于代码模式.在Razor看到HTML标记之前,它将保持代码模式.在你的例子中它不适合你的原因是因为@.当你已经处于代码模式时,解析器然后翻转回标记模式并假设你想要渲染@之后的任何内容(到语句的末尾).合理? (7认同)

Dan*_*plo 15

用分号删除@和前缀即.

intVariable += item.MyNumberOfInteres;
Run Code Online (Sandbox Code Playgroud)