Продолжаем работать с WebMatrix
В предыдущем посте мы познакомились с продуктом WebMatrix, который позволяет создавать простые сайты, имея минимум знаний в программировании. Как было сказано, WebMatrix позволяет перемешивать серверный код и HTML на подобии классического ASP или PHP. Давайте рассмотрим простые синтаксические конструкции, которые будут полезны для написания любого серверного кода.
Начнем с того, что весь серверный код начинается с символа @. Так, если Вы планируете вставить в HTML значение переменной или статического свойства, то достаточно записать конструкцию @имя переменной/свойства в том месте, где Вы хотите получить значение (например, внутри элемента div). Если же Вы планируете писать более сложный код, содержащий определение переменных и какую-то логику, то подобный код необходимо заключить в фигурные скобки, а каждую отдельную строку заканчивать точкой с запятой.
Пример 1.
@DateTime.Now.Day
Пример 2.
@{
var i=3;
Response.Write(i);
}
Естественно, что при описании логики кода, Вы можете использовать стандартные конструкции любого языка: условия и циклы. Так, WebMatrix поддерживает два языка при разработке динамических страниц, это C# и VB.NET. Мы будем писать весь код на C#. Ниже Вы можете увидеть небольшой пример, использующий конструкцию if.
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
@{
var message="";
if (IsPost)
{
message="His name is Sergiy";
}
}
<form action="" method="post">
<p><label>Enter ID:</label>
<input type="text" name="text2" />
</p>
<p><input type="submit" value="Add" /></p>
</form>
<p>@message</p>
</body>
</html>
Обратите внимание, что в примере выше мы использовали свойство IsPost, позволяющее определить был ли сгенерирован запрос впервые или в результате отправки данных пользователем с этой же страницы. Если пользователь отправил данные, то мы возвращаем имя пользователя из базы (базы пока у нас нет, поэтому возвращаем мое имя).
Код нашего примера можно переписать, используя различные синтаксические особенности ASP.NET Razor. В примере ниже, мы успешно смешиваем серверный код и HTML, не прилагая каких-то специальных усилий.
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="" method="post">
<p><label>Enter ID:</label>
<input type="text" name="text2" />
</p>
<p><input type="submit" value="Add" /></p>
</form>
@{
if (IsPost)
{
<p>His name is Sergiy</p>
}
}
</body>
</html>
Выглядит потрясающе. Такого нельзя было выполнить в старом добром ASP.NET. Тут есть одно ограничение: вставки HTML в серверный код должны быть полноценными HTML тегами, иными словами нельзя вставить обычный текст. Если Вы все же решили вставить обычный текст, то и для этого случая есть решение – оператор @:. Вот наш пример, с использованием этого оператора:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="" method="post">
<p><label>Enter ID:</label>
<input type="text" name="text2" />
</p>
<p><input type="submit" value="Add" /></p>
</form>
<p>
@{
if (IsPost)
{
@: His name is Sergiy
}
}
</p>
</body>
</html>
Оператор @: указывается только в начале строки, и также допускает перемешивать HTML и серверные переменные. Наконец, если текст состоит из нескольких строк, то его вывод можно оформить и с помощью элемента text:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="" method="post">
<p><label>Enter ID:</label>
<input type="text" name="text2" />
</p>
<p><input type="submit" value="Add" /></p>
</form>
<p>
@{
if (IsPost)
{
<text>His name is Sergiy</text>
}
}
</p>
</body>
</html>
Разобравшись в правилах смешивания серверного кода и HTML, перейдем к вопросам определения переменных и простым синтаксическим конструкциям. Но это будет уже в следующем посте.
Немного не потрясающе. Кажется был более компактный синтаксис
@if (IsPost)
{
some action
}
а то с @{if(условие){действие}} кажется громоздким
Jeje
11.08.2010 at 18:21
Такой синтаксис также замечательно работает. Просто я до этого примера, перед условием определял переменную и не стер скобки:)
Sergiy Baydachnyy
12.08.2010 at 06:44
Мотопомпы Robin Subaru со склада в СПб
Alex
27.03.2011 at 23:17