Примечание. Обратите внимание, что мы привели значение свойства ViewBag. ProductCount к int, чтобы использовать его с оператором switch. Это необходимо, поскольку оператор switch работает только с определенным набором типов, и он не может оценить динамическое свойство без приведения типов.

Внутри блока кода Razor вы можете вставлять HTML элементы и значения данных для представления, просто определив HTML и Razor выражения вот таким образом:

case 1: <b>Количество (@ViewBag. ProductCount)</b>

break; 

default: @ViewBag. ProductCount


Нам не нужно заключать элементы или выражения в кавычки или как-то по-особенному обозначать их: движок Razor будет интерпретировать их как выходные данные, которые будут обрабатываться в обычном порядке.

Однако если вы хотите вставить в представление просто текст, когда он не содержится в HTML элементе, вы должны помочь Razor и обозначить строку следующим образом:

case 0:  @: Нет на складе  case 0:  @: Нет на складе 


Символ @: предотвращения Razor от интерпретации строки как C# выражения, что является поведением по умолчанию, когда он сталкивается с текстом. Вы можете увидеть результат использования нашего условного оператора на рисунке 2.11.

Рисунок 2.11 - Использование условного оператора switch в представлении Razor

Условные операторы играют важную роль в Razor представлениях, потому что они позволяют подгонять содержание к значениям данных, которые представление получает от метода действия.

НЕ нашли? Не то? Что вы ищете?

В качестве дополнительного примера в листинге 2.17 показано добавление оператора if к представлению DemoExpression. cshtml – вы, естественно, знаете, что это очень широко используемый условный оператор.

Листинг 2.17.

@model WebApplication2.Models. Product

@{

  ViewBag. Title = "DemoExpression";

  Layout = "~/Views/_BasicLayout1.cshtml";

}

<table border="1">

  <thead>

  <tr>

  <th>Свойство</th>

  <th>Значение</th>

  </tr>

  </thead>

  <tbody>

  <tr>

  <td>Наименование</td>

  <td>@Model. Name</td>

  </tr>

  <tr>

  <td>Цена</td>

  <td>@Model. Price</td>

  </tr>

  <tr>

  <td>Запас</td>

  <td>

  @if (ViewBag. ProductCount == 0)

  { @: Нет на складе 

  }

  else if (ViewBag. ProductCount == 1)

  { <b> Количество (@ViewBag. ProductCount) </b>

  }

  else 

  { @ViewBag. ProductCount 

  }

  </td>

  </tr>

</tbody>

</table>


Этот условный оператор дает тот же результат, что и switch, но мы просто хотели показать, как вы можете связывать условные операторы C# с Razor представлениями.

Перечисление содержимого массивов и коллекций

При написании MVC приложений вам часто будет нужно перечислять содержимое массива или другого вида коллекции объектов, и генерировать подробный контент каждого из них. Чтобы показать, как это делается, мы определили новый метод действия DemoArray в контроллере HomeController, который вы можете увидеть в листинге 2.18.

Листинг 2.18.

public ActionResult DemoArray()

  {

  Product[] myarray = {

new Product {Name = "Kayak", Price = 275M},

new Product {Name = "Lifejacket", Price = 48.95M},

new Product {Name = "Soccer ball", Price = 19.50M},

new Product {Name = "Corner flag", Price = 34.95M}

};

  return View(myarray);

  }


Этот метод действия создает объект Product[], который содержит несколько простых значений данных, и передает его методу View, и эти данные показываются при помощи представления по умолчанию.

Visual Studio не предлагает опции для массивов и коллекций при создании представления, поэтому вам придется вручную ввести информацию о требуемом типе в диалоговом окне Add View (рисунок 2.12  ). Тип модели представления – это Razor. Models. Product[].

Рисунок 2.12 - Установка вручную типа модели представления для строго

типизированного представления

Вы можете увидеть содержимое файла представления DemoArray. cshtml в листинге 2.19, куда включены дополнения, которые мы сделали, чтобы показать информацию по элементам массива пользователи.

Листинг 2.19. Представление  DemoArray. cshtml

@model WebApplication2.Models. Product[]

@{

  ViewBag. Title = "DemoArray";

  Layout = "~/Views/_BasicLayout1.cshtml";

}

@if (Model. Length > 0)

{

  <table>

  <thead>

  <tr>

  <th>Product</th>

  <th>Price</th>

  </tr>

  </thead>

  <tbody>

  @foreach (WebApplication2.Models. Product p in Model)

  {

  <tr>

  <td>@p. Name</td>

  <td>$@p. Price</td>

  </tr>

  }

  </tbody>

  </table>

}

else

{  <h2>No product data</h2>

}


Мы использовали оператор @if, чтобы менять содержание в зависимости от длины массива, с которым мы работаем, и оператор @foreach, чтобы перечислить содержимое массива и создать строку в HTML таблицу для каждого из элементов. Вы видите, как эти выражения соответствуют своим C# копиям, и как мы создали локальную переменную р в цикле foreach, а затем обратились к ее свойствам, используя Razor выражения @p. Name и @p. Price.

В результате мы получаем элемент h2, если массив пуст, или, в противном случае, создаем одну  строку для каждого элемента массива в HTML таблице. Поскольку в этом примере наши данные  являются статическими, вы всегда будете видеть один и тот же результат, который представлен на рисунке 2.13.

Рисунок 2.13 - Генерирование элементов при помощи оператора foreach

Работа с пространством имен

Вы заметили, что в последнем примере мы должны были обращаться к классу Product в цикле foreach по его полному имени, вот такиv образом:

@foreach (WebApplication2.Models. Product p in Model)


Это может раздражать в сложных представлениях, где у вас будет много ссылок на модели представления и другие классы. Мы можем привести в порядок представления при помощи выражения @using, чтобы вставить пространство имен в контекст, как и для обычного C# класса.

В листинге 5-20 показано, как мы применили выражение @using для представления DemoArray. cshtml, которое мы создали ранее.

DemoArray. cshtml

@using WebApplication2.Models

@model Product[]


Представление может содержать несколько выражений @using. Мы использовали выражение @using, чтобы импортировать пространство имен WebApplication2.Models, что обозначает, что мы можем удалить пространство имен из выражения @model и из цикла foreach.

2.3  Задавания для выполнения лабораторной работы

Создать макет для представлений, используемый для создания логичности и постоянства в веб приложении. Создать и настроить  файл _ViewStart. cshtml. Использовать выражений Razor для создания контента представлений:
    вставка значений данных, -установка значений атрибутов, -использование операторов Razor.


2.4  Вопросы

Автономные представления. Выражения @using. Какой оператор используется в представлениях для работы с массивами и коллекциями? Как указать тип модели представления? Как передается объекта модели? Пример использования viewbag Операторы Razor.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4