This article is currently in the process of being translated into Chinese (~95% done).
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#教程。