TOC

This article is currently in the process of being translated into Chinese (~95% done).

Razor:

Loops

使用循环是一项非常重要的编程技能,同样,你也可以从Razor代码中受到循环带来的好处。循环可以使你重复一项动作或者迭代输出指定数量的内容——例如输出一个列表中的项目,我们将在本篇文章中看到这样的例子。

C#中有好几种类型的循环,这些循环在Razor中也能用。让我们把这些循环结构全都过一遍,使用相同的简单数据源:一张姓名表,我们将把这张表转换为一张HTML无序列表。

数据源

在你视图文件的顶部定义一张姓名列表,我们以此作为开始。定义表的语句如下所示:

@{
List<string> names = new List<string>()
{
"John Doe",
"Jane Doe",
"Joe Doe",
"Jenna Doe",
"Doggy Doe"
};
}

你现在就已经准备就绪,可以测试几种不同的循环了。

for 循环

当你需要知道当前循环究竟循环到哪了的时候,就需要用到for循环,它非常适合这种情况。因为你总能访问到用于计数的变量(在本例中叫做i):

<ul>
@for (int i = 0; i < names.Count; i++)
{
<li>@names[i]</li>
}
</ul>

foreach 循环

foreach循环无疑是执行任务的最简单循环,像这样:

<ul>
@foreach (string name in names)
{
<li>@name</li>
}
</ul>

while 循环

while循环更适合其它的使用情况,而不是我们现在的这种使用情况,但是你依然可以用:

<ul>
@{
int counter = 0;
}
@while(counter < names.Count)
{
<li>@names[counter++]</li>
}
</ul>

do...while 循环

与while循环很像,这种循环更适合其它类型的循环任务。while循环与do..while循环的区别是条件何时被满足。对于while循环,在进入第一次迭代(循环)之前,就会判断条件是否被满足。这也就意味着,循环有可能永远都不会被执行——而do..while循环在先进行一次迭代(循环)后再判断条件是否满足,这也就意味着它总是会至少循环一次。

<ul>
@{
counter = 0;
}
@do
{
<li>@names[counter++]</li>
} while (counter < names.Count);
</ul>

break与continue

通常所有这些循环都可以被中断(完全跳出循环结构),也可以继续迭代(停止当前迭代,然后跳转到下一迭代)。下面是被修改过的for循环例子,我们在其中加入了一个if语句,来确保我们在打印最多3个姓名之后就结束循环:

<ul>  
@for (int i = 0; i < names.Count; i++)  
{  
<li>@names[i]</li>  
@if(i >= 2)  
{  
<li>...and so on</li>  
break;  
}  
}  
</ul>

总结

如你所见,使用Razor代码循环迭代数据就像在C#中那样。你甚至可以跳转进入以及跳出HTML标记,像本文中的例子所描绘的那样。本文主要描绘了使用Razor代码循环迭代数据是多么容易的——如果你想深入了解每种循环背后的理论知识,请参考我们的C#教程。


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!