Трудно сказать, что популярнее при работе с представлениями – логические операции или циклы, но точно они играют очень важную роль. Я бы обоих поставил на вторую строчку, а первую отдал бы выводу информации.
В 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#.