Синтаксис Razor
Перед началом разработки следует рассмотреть синтаксис Razor — нового движка представлений в составе ASP.NET. В настоящее время Razor уже включён в ASP.NET MVC 3, и является единственным доступным движком представлений в WebMatrix.
Основной смысл разработки ситаксиса Razor — уменьшить количество лишних символов, вводимых при разработке представлений в ASP.NET.
Для начала, следует запомнить, что все блоки кода должны быть представлены в фигурных @{ ... }
скобках. Подразумевается, что как только вы введёте @
, вы начинаете вводить блок кода. Всё, что следует за @
, рассматривается как код, если вы не укажете обратное:
@{ var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10
foreach(var number in numbers){
}
}
Чтобы в этом цикле отобразить значение переменной, необходимо указать это знаком @
:
@{ var numbers = Enumerable.Range(1, 10);
foreach(var number in numbers){
@number
}
}
Если вы хотите отобразить значение выражения, используйте вот такой @( ... )
синтаксис:
@{ var numbers = Enumerable.Range(1, 10);
foreach(var number in numbers){
@(number * 10)
}
}
Есть несколько способов совместить отображение значения выражения (или переменной) и разметки в блоке кода. Если вы хотите совместить выражения и простой текст, то просто укажите @:
перед началом текста:
@{
var numbers = Enumerable.Range(1, 10);
foreach(var number in numbers){
@(number * 10)@:
}
}
Использовать оператор @:
можно 1 раз на всю строку:
@{ var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10
foreach(var number in numbers){
@(number * 10)@: * 10 = @(number * 10)
}
}
Также Razor умеет распознавать html-тэги. Если в блоке кода встретится такой тэг, Razor будет считать, что началась часть разметки до тех пор, пока не достигнет парного закрывающего тэга:
@{
var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10
foreach(var number in numbers){
<span>@(number * 10) </span>
}
}
Самозакрывающиеся тэги обрабатываются точно также:
@{ var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10
foreach(var number in numbers){
@(number * 10)<br />
}
}
Если вы не хотите лишний раз использовать тэги, то можете использовать <text> тэг, это укажет Razor-у, что началась разметка, но тэг <text> не будет отправлен браузеру:
@{ var numbers = Enumerable.Range(1, 10); //Get numbers from 1 - 10
foreach(var number in numbers){
<text>@(number * 10) * 10 = @(number * 10) </text>
}
}
Как вы уже заметили, комментарии внутри блока кода могут быть оформлены стандартными средствами языка — двумя прямыми слешами или /*…*/. Также, вне блока кода вы можете использовать @*…*@:
@*Get numbers between 1 - 10*@
@{ /*Get numbers from 1 - 10*/
//Get numbers between 1 - 10
var numbers = Enumerable.Range(1, 10);
foreach(var number in numbers){ @number } }
В следующем примере показано, что для операторов перебора и ветвления необязательно ставить кривые скобки, хватит и просто знака @
:
@{ var numbers = Enumerable.Range(1, 10); }
@foreach(var number in numbers){ @number }
@for(var i = 0, i < numbers.Count(); i++){ @numbers.ElementAt(i) }
@if(numbers.Count() == 10)
{
@:10 Numbers - Good!
}
@{var condition = 1; var message = "";}
@switch(condition){
case: 1
message = "Case 1";
break;
case: 2
message = "Case 2";
break;
case: 3
message = "Case 3";
break;
default:
message = "Default Case";
break;
}
Эта небольшая статья описывает всё что нужно для использования Razor внутри ASP.NET Web Pages или WebMatrix. Если вам необходимо больше информации о парсере движка Razor, его развитии и перспективах использования, то вы можете прочитать серию записей Inside Razor в блоге Andrew Nurse.
Эта статья является неполным переводом записи с блога Майкла.