3.5. Циклы в представлениях .NET Core

Трудно сказать, что популярнее при работе с представлениями – логические операции или циклы, но точно они играют очень важную роль. Я бы обоих поставил на вторую строчку, а первую отдал бы выводу информации.

В 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#.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне