ASP - Создание страницы ASP. Добавление команд в сценарий для сервера

Вайбер на компьютер 14.04.2019
Вайбер на компьютер

The number of places where you might use or encounter the @ sign in ASP.NET has grown over the last few years and its exact purpose in all circumstances still seems to cause confusion. Here"s an overview of the most common places that it crops up, and guidance on its correct usage.

Razor Syntax

Razor was launched as a new templating syntax with the introduction of the ASP.NET Web Pages framework. A new view engine was added to MVC 3 that makes use of Razor. Razor enables mixing server-side code with HTML mark up to generate an HTML response that the framework sends to the browser. The @ sign has four uses in Razor:

  • To open a code block
  • To denote an inline expression or statement
  • To render the value of variables
  • To render single lines of content that contain plain text or unmatched HTML tags

Code blocks are sections of C# code that do not include any output to be rendered. They are usually positioned at the top of the Web Page or View and typically contain the logic for processing a page in Web Pages, or simple view-specific instructions in MVC. Code block start with the @ sign followed by an opening curly brace, and end with a closing curly brace:

@{ ViewBag.Title = "Edit" ; Layout = "~/Views/Shared/_EditLayout.cshtml" ; }

The content within the code block is standard C# code. A common mistake is to prefix variables declared within the code block with the @ sign. This is not necessary.

Inline expressions or statements are snippets of C# code appearing within HTML. Most often, these are used to make decisions on what to render based on conditions, or to iterate collections for display to the browser:

< ul > @ foreach (var item in rows) { // do something }

Nested expressions or statements do not start with an @ sign...

< ul > @ foreach (var item in rows) { if (item.Equals(x)) { // do something } }

Unless they are separated from the outer expression or statement by unmatched tags

< ul > @ foreach (var item in rows) { < li > @ if (item.Equals(x)) { // do something } }

The @ sign is used in Razor to render the value of variables, expressions and statements to the browser:

@ DateTime .Now @(someCondition ? x: y )

Variables within expressions and statements should not be prefixed with the @ sign.

If you wish to render plain text or unmatched tags while inside a statement block, you use the @ sign followed by a colon to tell Razor that what follows is not C# code:

@ if (item == x) // plain text { @: The time is @ DateTime .Now } @ if (item == x) // unmatched tags { @: < ul > } else { @: < ol > } Identifiers

An identifier in C# is the name given to a namespace, class, variable, property, method, interface etc. Rules govern what makes a valid identifier . It is permitted to use a C# keyword as an identifier, but if you do, you must use the @ sign to prevent compile time errors. You are advised against using a keyword as an identifier, but there are times when you cannot avoid doing so.

Some overloads of the HtmlHelper classes (Web Pages and MVC) accept an object to represent the HTML attributes to be rendered as part of the tag that the helper represents. The following example adds a style attribute to a text input and sets its value to width:100%; :

@ Html.TextBoxFor(model => new { style = "width:100%;" })

When you do this, you are creating an anonymous type with a property called style to represent the HTML attributes. If you want to set the CSS class attribute via this method, you need to add a property to the anonymous type called class - which is a C# keyword. Therefore you must use the @ sign to enable the use of class in this case:

@ Html.TextBoxFor(model => model.FirstName, htmlAttributes: new { @class = "full-width" })

A mistake I see repeated quite often in the ASP.NET forums is to apply the @ sign to all other properties of the anonymous type, which is just not necessary. Some people even think that the @ sign used here is part of the Razor syntax rules. It"s not. It"s usage here preceded Razor by a long way.

Verbatim String Literals

A verbatim string literal in C# consists of the @ sign followed by a literal string in double quotes and terminated with a semi-colon e.g.

var s = @"Hello World" ;

Two benefits of using a verbatim string literal include the fact that you only need to escape double quotes (by doubling them); and the string can span multiple lines in code without requiring continuation characters. For these reasons, verbatim string literals are most suitable for representing paths (which may otherwise need their slashes escaping) and regular expression patterns (which also may otherwise require backslashes to be escaped).

Regex re = new Regex (@"\w\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}\w" );

They are also useful for representing large blocks of text if they need to be included in code in a readable manner, such as SQL statements that might be used in Web Pages applications:

var sql = @"SELECT p.ProductName, o.UnitPrice, o.Quantity, (o.UnitPrice * o.Quantity) - (o.UnitPrice * o.Quantity * o.Discount) As TotalCost FROM OrderDetails o INNER JOIN Products p ON o.ProductID = p.ProductID WHERE o.OrderID = @0" ;

The use of the @ sign in this context once again has nothing to do with Razor syntax.

Summary

If you have ever wondered when and where you should be using the @ sign in your ASP.NET code, hopefully this article has helped to resolve your confusion.

Файл Active Server Pages (ASP) представляет собой текстовый файл с расширением «.asp». Этот файл может содержать:

  • текстовые данные;
  • теги языка HTML;
  • серверные сценарии.

Для быстрого создания файла «.asp» достаточно переименовать HTML-файл, сменив расширение «.htm» или «.html» на «.asp». Если файл не содержит функций ASP, сервер просто выполняет эффективную отправку файла на компьютер пользователя. Эта черта обеспечивает дополнительные удобства для веб-разработчиков, которые могут давать файлам расширение «.asp», даже если не предполагают впоследствии включать в них функции ASP.

Для опубликования вновь созданного файла «.asp» в Интернете следует сохранить его в виртуальном каталоге веб-узла (последний должен иметь разрешение «Сценарий» или «Выполнение»). После этого можно обратиться к данному файлу в запросе, указав в обозревателе соответствующий адрес URL. (Необходимо помнить, что поскольку страницы ASP должны обрабатываться на сервере, ввод физического пути к файлу «.asp» в данном случае недопустим.) Переданный сервером файл при просмотре в обозревателе представляет собой страницу HTML. В этом есть определенный смысл, так как перед отправкой файла на сервере выполняется его синтаксический анализ и выполняются все серверные сценарии ASP. Поэтому пользователи всегда получают обычные файлы HTML.

Файлы «.asp» могут создаваться в любом текстовом редакторе. По мере накопления опыта более удобной может оказаться работа в специальном редакторе, включающем дополнительную поддержку ASP, таком как Microsoft® Visual InterDev™. (Дополнительные сведения см. на веб-узле Microsoft Visual InterDev по адресу http://msdn.microsoft.com/vinterdev/ .)

Добавление команд в сценарий для сервера

Серверный сценарий состоит из последовательности инструкций, обеспечивающих поочередное поступление команд на веб-сервер. (Разработчикам веб-узлов могут быть хорошо знакомы клиентские сценарии, выполняющиеся в веб-обозревателе.) В файлах «.asp» для обособления сценариев от текстовых данных и команд HTML используются разделители. Разделителем является символ или последовательность символов, которыми обозначается начало или конец раздела. Язык HTML в качестве таких разделителей использует символы (), между которыми располагаются теги HTML.

В ASP команды сценариев заключаются в разделители . В разделителях можно указывать любые допустимые команды используемого языка сценариев. Ниже показан пример простой страницы HTML с командами сценария.

This page was last refreshed on .

Функция VBScript Now() возвращает текущие дату и время. Во время обработки данной страницы веб-обозреватель заменит текущими значениями даты и времени и возвратит страницу обозревателю со следующим результатом:

This page was last refreshed on 01/29/99 2:20:00 PM.

Команды, заключенные в разделители, называются основными командами сценариев и обрабатываются при помощи основного языка сценариев. Команда внутри разделителей должна быть допустимой командой основного языка сценариев. По умолчанию основным языком сценариев является VBScript; можно назначить и другой язык сценариев по умолчанию. См. Работа с языками сценариев .

Разработчикам клиентских сценариев хорошо знаком HTML-тег , используемый для выделения команд и выражений. В серверных сценариях тег может применяться для определения процедур на нескольких языках, содержащихся в одном файле «.asp». Дополнительные сведения по этому вопросу см. в разделе Работа с языками сценариев .

Совместное использование тегов HTML и команд языка сценариев

В разделители ASP можно поместить любую инструкцию, выражение, процедуру или оператор, применение которых разрешено в используемом основном языке сценариев. Под инструкцией в VBScript и других языках написания сценариев понимают синтаксически полную конструкцию, которой описывается один вид действия, объявления или определения. Примером часто используемой инструкции является условная инструкция If...Then...Else :

В зависимости от времени дня строковой переменной strGreeting в сценарии присваивается значение "Good Morning!" («Доброе утро!») или "Hello!" «Здравствуйте!». Инструкция отправляет текущее значение переменной в обозреватель.

Таким образом, до 12:00 дня (по местному времени) на экраны пользователей выводится строка:

Good Morning!

После 12:00 пользователи увидят сообщение:

Между различными частями инструкции может располагаться HTML-текст. Так, результат выполнения приведенного ниже сценария с тегами языка HTML и инструкцией If...Then...Else является таким же, как и в примере выше:

Good Morning! Hello!

Если заданное в сценарии условие выполняется (полдень еще не наступил), веб-сервер отправляет в обозреватель указанный в условии текст HTML (“Good Morning”). В противном случае в обозреватель отправляется строка (“Hello!”), указанная после Else . Подобное чередование HTML-текста и команд сценариев часто применяется при работе с инструкцией If...Then...Else . Применение рассмотренной выше конструкции удобно, если приветствие требуется вывести в нескольких местах веб-страницы. Значение переменной устанавливается только один раз, после чего оно может использоваться многократно.

HTML-текста может также передаваться в обозреватель непосредственно из команды сценария, а не размещаться между различными командами. Возврат текста в обозреватель осуществляется встроенным объектом ASP Response . Результат выполнения следующего сценария тот же, что и в предыдущем примере:

Команда Response.Write отправляет расположенный после нее текст в обозреватель. Инструкцию с Response.Write следует использовать в тех случаях, когда возвращаемый в обозреватель текст должен создаваться динамически. Таким образом, например, можно составить строку из значений нескольких переменных. Чтобы узнать больше об объекте Response в частности и об объектах вообще, обратитесь к разделам Использование компонентов и объектов и Отправка содержимого в веб-обозреватель . Сейчас же просто следует заметить, что добавление команд сценария на страницу HTML можно осуществить несколькими способами.

Допускается включение процедур, написанных на основном языке сценариев, с использованием разделителей ASP. Дополнительные сведения см. в разделе Работа с языками сценариев .

При создании сценария на языке JScript непосредственно в команды ASP могут включаться блоки инструкций в фигурных скобках. В этих конструкциях допускается также присутствие HTML-тегов и текста. Пример.

This is the text version of a page. This is the multimedia version of a page.

Работа с директивами ASP

ASP предоставляет директивы, которые не входят в состав используемого языка сценариев: директиву для вывода данных и директиву для их обработки.

В ASP директива вывода позволяет вывести значение выражения на экран. Эта директива вывода равнозначна команде Response.Write . Например, выражение можно использовать для вывода на экран слова Baltimore (текущее значение переменной) в обозревателе.

Директива обработки позволяет передавать в ASP данные, которые необходимы для обработки файла «.asp». В следующем примере показаны директивы для VBScript в качестве основного языка сценариев на странице:

Директива обработки должна быть первой строкой в файле «.asp». Если страница должна содержать несколько директив, они должны располагаться внутри одной пары разделителей. Включение в файл директивы обработки с помощью инструкции #include не допускается. (Дополнительные сведения см. в разделе

В следующем примере задаются язык сценария и кодовая страница:

Пустые промежутки в сценариях

Если основным языком сценария является VBScript или JScript, ASP автоматически убирает пустые промежутки, которые могут встречаться в командах. В случае остальных языков написания сценариев эти промежутки сохраняются. Это обеспечивает правильность интерпретации команд в языках, где имеют значение местоположение элементов и отступы. Пустыми промежутками являются пробелы, знаки табуляции, возврата каретки и разрыва строки.

В языках VBScript и JScript допускается оставлять промежутки после открывающим и перед закрывающим разделителем. Это облегчает чтение команд. Так, перечисленные ниже инструкции правильны:

Промежуток между закрывающими разделителем одной инструкции и открывающим разделителем другой в ASP удаляется автоматически. Тем не менее, использование пропусков повышает легкость чтение. Чтобы сохранить промежуток между двумя инструкциями, например при отображении значений переменных в предложении, следует пользоваться знаком неразрывного пробела из языка HTML (). Например:



Рекомендуем почитать

Наверх