В предыдущем примере две переменные комбинируются посредством точки между ними (@foo.@bar
). Это не обычная "точечная" запись в языке С#, предназначенная для навигации по цепочке свойств. Здесь просто значения двух переменных выводятся в поток ответа с физической точкой между ними. Если вас интересует "точечная" запись в отношении переменной, тогда примените @
к переменной и записывайте свой код стандартным образом:
@foo.ToUpper
Если вы хотите вывести низкоуровневую HTML-разметку, тогда используйте так называемые
@Html.Raw(htmlString)
В блоках кода можно смешивать разметку и код. Строки, начинающиеся с разметки, интерпретируются как HTML, а остальные строки — как код. Если строка начинается с текста, который не является кодом, вы должны применять указатель содержимого (@:
) или указатель блока содержимого (
). Обратите внимание, что строки могут меняться с одного вида на другой и наоборот. Ниже приведен пример:
@{
@:Straight Text
Lines without HTML tag
}
При желании отменить символ @
используйте удвоенный @
. Кроме того, механизм Razor достаточно интеллектуален, чтобы обрабатывать адреса электронной почты, поэтому отменять символ @
в них не нужно. Если необходимо заставить Razor трактовать символ @
подобно маркеру Razor, тогда добавьте круглые скобки:
@@foo
test@foo
test@(foo)
Предыдущий код выводит [email protected]
, @foo
, test@foo
и testFoo
.
Комментарии Razor открываются с помощью @*
и закрываются посредством *@
:
@*
Multiline Comments
Hi.
*@
В Razor также поддерживаются внутристрочные функции. Например, следующая функция сортирует список строк:
@functions {
public static IList
var list = from s in strings orderby s select s;
return list.ToList;
}
}
Приведенный далее код создает список строк, сортирует их с применением функции SortList
и выводит отсортированный список в браузер:
@{
var myList = new List
var sortedList = SortList(myList);
}
@foreach (string s in sortedList)
{
@s@:
}
Вот еще один пример, где создается делегат, который можно использовать, чтобы установить для строки полужирное начертание:
@{
Func
}
This will be bold: @b("Foo")
Кроме того, Razor содержит вспомогательные методы HTML, которые предоставляются инфраструктурой ASP.NET Core, например, DisplayForModel
и EditorForModel
. Первый применяет рефлексию к модели представления для отображения на веб-странице. Второй тоже использует рефлексию, чтобы создать HTML-разметку для формы редактирования (имейте в виду, что он не поставляет дескрипторы Form, а только разметку для модели). Вспомогательные методы HTML подробно рассматриваются позже в главе.
Наконец, в версии ASP.NET Core появились
Представления
Представления — это специальные файлы кода с расширением 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