Трудно сказать, что популярнее при работе с представлениями – логические операции или циклы, но точно они играют очень важную роль. Я бы обоих поставил на вторую строчку, а первую отдал бы выводу информации.
В Razor поддерживаются все необходимые нам возможности работы с циклами – for, foreach, while и do..while. Они работают так же, как и в коде на C#, просто в представлении нужно начинать с символа @, как мы уже делали с логическими операциями. Итак, несколько примеров.
Для циклов создадим новый метод в контроллере RazortestController:
public IActionResult List()
{
var people = new Person[] {
new Person() { FirstName = "Mikhail", LastName = "Flenov", Age = 42 },
new Person() { FirstName = "Ivan", LastName = "Sergeev", Age = 29 },
new Person() { FirstName = "Lena", LastName = "Petrova", Age = 20 },
};
return View(people);
}
В этом методе List создается массив из трех объектов класса Person и помещается в переменную people. После этого возвращаем в качестве результата метода View и передаем в качестве модели наш массив.
Так как я не указал, какое view отображать, то фреймворк будет искать по умолчанию файл List.cshtml в папке Views/Razortest. Создайте такой файл и давайте начнем писать в нем код. В самом начале нужно указать модель, которую мы получили:
@model MyWebSite.Model.Person[]
Теперь на примере этой модели можно рассмотреть все возможные циклы. Первый –самый классический for:
<h1>for</h1>
<p>Цикл for:</p>
<ul>
@for (var i = 0; i < Model.Length; i++)
{
<li>@Model[i].LastName @Model[i].LastName (@Model[i].Age)</li>
}
</ul>
Далее более популярный foreach, который, на мой взгляд более популярен и удобнее для перебора элементов массива:
<h1>foreach</h1>
<p>Цикл foreach:</p>
<ul>
@foreach (var p in Model)
{
<li>@p.LastName @p.LastName (@p.Age)</li>
}
</ul>
Цикл While:
<h1>while</h1>
<p>Цикл while:</p>
<ul>
@{
int index = 0;
}
@while (index < Model.Length)
{
<li>@Model[index].LastName @Model[index].LastName (@Model[index].Age)</li>
index++;
}
</ul>
Для цикла while нужна какая-то переменная, которую мы будем использовать как счетчик и в данном примере я создаю переменную index типа int прямо перед блоком цикла. Так как эта должна быть С№ переменная, и это должен быть C# код, его я написал в блоке @{}.
@{
int index = 0;
}
Ну и наконец цикл do..while. Его используют наверно реже всего.
<h1>do..while</h1>
<p>Цикл do..while:</p>
<ul>
@{
index = 0;
}
@do
{
<li>@Model[index].LastName @Model[index].LastName (@Model[index].Age)</li>
index++;
} while (index < Model.Length);
</ul>
Так как в предыдущем цикле я уже создал переменную index и здесь хочу просто использовать заново, перед началом цикла нужно установить значение переменной в 0, поэтому и написан такой блок:
@{
index = 0;
}
Здесь уже созданной ранее переменной index присваивается значение 0, чтобы начать цикл с начала.
Не думаю, что нужно останавливаться на каком-то из циклов отдельно, потому что мы не учимся программировать и я подразумеваю, что у вас базовые знания C# есть. Здесь все работает абсолютно также, как в большинстве С подобных языках. Все эти циклы я рассматривал в своей книге Библия C#.