Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

}

}

Приведенный далее код создает список строк, сортирует их с применением функции

SortList
и выводит отсортированный список в браузер:

@{

var myList = new List<string> {"C", "A", "Z", "F"};

var sortedList = SortList(myList);

}

@foreach (string s in sortedList)

{

@s@:&nbsp;

}

<hr/>

Вот

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

@{

Func<dynamic, object> b = @<strong>@item</strong>;

}

This will be bold: @b("Foo")

Кроме того, Razor содержит вспомогательные методы HTML, которые предоставляются инфраструктурой ASP.NET Core, например,

DisplayForModel
и
EditorForModel
. Первый применяет рефлексию к модели представления для отображения на веб-странице. Второй тоже использует рефлексию, чтобы создать HTML-разметку для формы редактирования (имейте в виду, что он не поставляет дескрипторы Form, а только разметку для модели). Вспомогательные методы HTML подробно рассматриваются позже в главе.

Наконец, в версии ASP.NET Core появились вспомогательные функции дескрипторов (tag helper), которые объединяют разметку и код; они будут обсуждаться далее в главе.

Представления

Представления — это специальные файлы кода с расширением

cshtml
, содержащие сочетание разметки HTML, стилей CSS, кода JavaScript и кода Razor.

Каталог Views

Внутри каталога Views хранятся представления в проектах ASP.NET Core, использующих паттерн MVC. В самом каталоге Views находятся два файла:

_iewStart.cshtml
и
_ViewImports.cshtml
.

Код в файле

_ViewStart.cshtml
выполняется перед визуализацией любого другого представления (за исключением частичных представлений и компоновок). Файл
_ViewStart.cshtml
обычно применяется с целью установки стандартной компоновки для представлений, в которых она не указана. Компоновки подробно рассматриваются в разделе "Компоновки" позже в главе. Вот как выглядит содержимое файла
_ViewStart.cshtml
:

@{

Layout = "_Layout";

}

Файл

_ViewImports.cshtml
служит для импортирования совместно используемых директив, таких как операторы
using
. Содержимое применяется ко всем представлениям в том же каталоге или подкаталоге, где находится файл
_ViewImports
. Добавьте оператор
using
для
AutoLot.Models.Entities
:

@using AutoLot.Mvc

@using AutoLot.Mvc.Models

@using AutoLot.Models.Entities

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Строка

@addTegHelper
будет раскрыта вместе со вспомогательными функциями дескрипторов.

На заметку! А для чего служит ведущий символ подчеркивания в

_ViewStart.html
,
_ViewImports.cshtml
и
_Layout.cshtml
? Механизм визуализации Razor изначально создавался для платформы WebMatrix, где не разрешалось напрямую визуализировать файлы, имена которых начинались с символа
подчеркивания. Все ключевые файлы (вроде компоновки и конфигурации) имеют имена, начинающиеся с символа подчеркивания. Это не соглашение MVC, поскольку здесь отсутствует проблема, которая была в WebMatrix, но наследие символа подчеркивания продолжает существовать.

Как упоминалось ранее, каждый контроллер получает собственный каталог внутри каталога Views, в котором хранятся его специфичные представления. Имя такого каталога совпадает с именем контроллера (без суффикса

Controller
). Скажем, в каталоге
Views\Cars
содержатся все представления для
CarsController
. Представления обычно именуются согласно методам действий, которые их визуализируют, хотя их имена можно изменять, как уже было показано.

Каталог Shared

Внутри каталога

Views
есть специальный каталог по имени
Shared
, в котором хранятся представления, доступные всем контроллерам и действиям. Как уже упоминалось, если запрошенный файл представления не удалось найти в каталоге, специфичном для контроллера, тогда поиск производится в каталоге
Shared
.

Каталог DisplayTemplates

В каталоге

DisplayTemplates
хранятся специальные шаблоны, которые управляют визуализацией типов, а также содействуют многократному использованию кода и согласованности отображения. Когда вызываются методы
DisplayFor/DisplayForModel
, механизм визуализации Razor ищет шаблон, имя которого совпадает с именем визуализируемого типа, например,
Car.cshtml
для класса
Car
. Если специальный шаблон найти не удалось, тогда разметка визуализируется с применением рефлексии. Поиск начинается с каталога
Views\{CurrentControllerName}\DisplayTemplates
и в случае неудачи продолжается в каталоге
Views\Shared\DisplayTemplates
. Методы
DisplayFor/DisplayForModel
принимают необязательный параметр, указывающий имя шаблона.

Шаблон отображения DateTime

Создайте внутри каталога

Views\Shared
новый каталог под названием
DisplayTemplates
и добавьте в него новое представление по имени
DateTime.cshtml
. Удалите сгенерированный код вместе с комментариями и замените его следующим кодом:

@model DateTime?

@if (Model == null)

{

@:Unknown

}

else

{

if (ViewData.ModelMetadata.IsNullableValueType)

{

@:@(Model.Value.ToString("d"))

}

else

{

@:@(((DateTime)Model).ToString("d"))

}

}

Обратите внимание, что в директиве

@model
, строго типизирующей представление, используется буква m нижнего регистра. При ссылке на присвоенное значение модели в Razor применяется буква
М
верхнего регистра. В этом примере определение модели допускает значения
null
. Если переданное представлению значение для модели равно
null
, то шаблон отображает слово
Unknown
(неизвестно). В противном случае шаблон отображает дату в сокращенном формате, используя свойство
Value
допускающего
null
типа или саму модель.

Поделиться:
Популярные книги

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Черный дембель. Часть 1

Федин Андрей Анатольевич
1. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 1

Лишняя дочь

Nata Zzika
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Лишняя дочь

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

Последний из рода Демидовых

Ветров Борис
Фантастика:
детективная фантастика
попаданцы
аниме
5.00
рейтинг книги
Последний из рода Демидовых

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений

Попаданка в академии драконов 4

Свадьбина Любовь
4. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.47
рейтинг книги
Попаданка в академии драконов 4

Боги, пиво и дурак. Том 6

Горина Юлия Николаевна
6. Боги, пиво и дурак
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 6

Курсант: Назад в СССР 10

Дамиров Рафаэль
10. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 10

Сделай это со мной снова

Рам Янка
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сделай это со мной снова

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

Камень Книга двенадцатая

Минин Станислав
12. Камень
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Камень Книга двенадцатая

Небо для Беса

Рам Янка
3. Самбисты
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Небо для Беса

Надуй щеки! Том 4

Вишневский Сергей Викторович
4. Чеболь за партой
Фантастика:
попаданцы
уся
дорама
5.00
рейтинг книги
Надуй щеки! Том 4