2011-09-23 74 views
30

嗯,这只是尴尬。我甚至无法弄清楚ASP.NET MVC3(Razor)中的一个视图中的简单增量。我已经完成了搜索,看起来Razor的文档非常稀少。下面是我曾尝试和惨败:ASP.NET MVC3中的视图中的局部变量的简单增量(剃刀)

@{ 
    var counter = 1; 

    foreach (var item in Model.Stuff) { 
     ... some code ... 
     @{counter = counter + 1;} 
    } 
} 

我也曾尝试@{counter++;}只是踢和无济于事=),我将不胜感激,如果有人可以赐教。谢谢!

回答

58
@{ 
    int counter = 1; 

    foreach (var item in Model.Stuff) { 
     ... some code ... 
     counter = counter + 1; 
    } 
} 

说明:

@{ 
// csharp code block 
// everything in here is code, don't have to use @ 
int counter = 1; 
} 

@foreach(var item in collection){ 
    <div> - **EDIT** - html tag is necessary for razor to stop parsing c# 
    razor automaticaly recognize this as html <br/> 
    this is rendered for each element in collection <br/> 
    value of property: @item.Property <br/> 
    value of counter: @counter++ 
    </div> 
} 
this is outside foreach 
+0

谢谢。我已经尝试了两个。第一个至少加载页面,但foreach循环没有超过第一个循环,这告诉我出现了计数器出了问题。第二个建议导致编译错误。 –

+1

你有没有尝试将计数器声明为int?编辑其实,它是int当分配... –

+0

是的,使用'int counter'为我工作。谢谢您的帮助! =) –

16

我没有在这里找到答案在C#中是非常有用的 - 所以这里的人来到这个页面找C#示例工作示例:

@{ 
int counter = 0; 
} 


@foreach(Object obj in OtherObject) 
{ 
    // do stuff 
    <p>hello world</p> 
    counter++; 
} 

简单地说,就像我们已经在@foreach中一样,我们不需要将增量放在任何@ {}值中。

2

另一种清洁方法是:

<div> 
@{int counter = 1; 
foreach (var item in Model) 
{ 
    <label>@counter</label> 
    &nbsp; 
    @Html.ActionLink(item.title, "View", new { id = item.id }) 
    counter++; 
} 
} 
</div> 
7

如果你需要做的是显示的编号,成为一个更清洁的解决方案是增量和回报一气呵成:

@{ 
    var counter = 0; 
} 
<section> 
    @foreach(var hat in Ring){ 
     <p> Hat no. @(++counter) </p> 
    }   
</section> 
+0

唯一对我有效的解决方案 – kobe

+1

同上。我认为关键是围绕++计数器的括号。 –

1

请参阅下面的代码,以增加ASP.NET中的视图中的局部变量对我来说它的工作正常。

var i = 0; 
@foreach (var data in Model) 
{ 
    i++; 
    <th scope="row"> 
      @i 
    </th>.... 
}...