Применение Visual Basic на веб-страницах ASP.NET
[Данная документация является предварительной и может быть изменена.] Приведенные в этой пособии примеры кода ASP.NET, использующие синтаксис Razor, базируются на языке C#. Однако синтаксис Razor также поддерживает Visual Basic. Чтобы запрограммировать страницу на Visual Basic, необходимо создать страницу с расширением имени файла VBHTML, а затем добавить код Visual Basic. В этом приложении приводятся общие сведения о работе с языком и синтаксисом Visual Basic, относящиеся к созданию веб-страниц ASP.NET. Полученные знания:
Восемь важнейших советов о программировании В этом разделе излагаются некоторые советы, совершенно необходимые программисту, приступающему к написанию серверного кода ASP.NET с использованием синтаксиса Razor. 1. При добавлении кода на страницу используется символ @ Выражения встроенного кода, блоки из одной и нескольких инструкций начинаются с символа @.
Результат, отображаемый в браузере: 2. Блоки кода ограничиваются ключевыми словами "Code...End Code" Блок кода содержит одну или несколько инструкций и ограничивается ключевыми словами Code и End Code. Начальное ключевое слово Code помещается непосредственно после символа @ без пробела между ними.
Результат, отображаемый в браузере: 3. Каждая инструкция кода внутри блока заканчивается разрывом строки В блоке кода Visual Basic каждая инструкция заканчивается разрывом строки. (Далее в этой главе будет показан способ разбиения (при необходимости) длинной инструкции кода на несколько строк.)
4. Для хранения значений используются переменные В переменной можно сохранять значения, включая строки, числа, даты и т.д. Новая переменная создается с помощью ключевого слова Dim. Значения переменных можно вставлять прямо на страницу с помощью символа @.
Результат, отображаемый в браузере: 5. Строковые значения литералов заключаются в двойные кавычки Строка — это последовательность символов, которые обрабатываются как текст. Для выделения строки ее заключают в двойные кавычки.
Чтобы добавить выражение в двойных кавычках в строковое значение, вставьте в строку пару кавычек. Если требуется, чтобы двойные кавычки отображались на выводимой странице один раз, введите в заключаемую в кавычки строку "". Чтобы они отобразились дважды, введите в строку """".
Результат, отображаемый в браузере: 6. В коде Visual Basic регистр не учитывается В языке Visual Basic регистр не учитывается. Ключевые слова программирования (такие как Dim, If и True) и имена переменных (такие как myString или subTotal) могут вводиться в любом регистре. В приведенных ниже строках кода переменной lastname значение присваивается строчными буквами, а затем значение переменной выводится на страницу заглавными буквами.
Результат, отображаемый в браузере: 7. Значительную роль в создании кода играет работа с объектами Объект представляет сущность, посредством которой может осуществляться программирование: страницу, текстовое поле, файл, изображение, веб-запрос, сообщение электронной почты, запись клиента (строку базы данных) и т.д. Объектам присущи свойства, описывающие их характеристики. Так, у объекта "текстовое поле" имеется свойство Text, у объекта "запрос" — свойство URL, у сообщения электронной почты — свойство From, а у объекта Customer — свойство FirstName. Объекты также имеют методы — "глаголы", обозначающие действия, которые эти объекты могут выполнять. В качестве примеров можно привести метод Save объекта File, метод Rotate объекта Image и метод Send объекта Email. Часто приходится работать с объектом Request, предоставляющим такую информацию, как значения полей формы на странице (текстовых полей и др.), тип браузера, из которого направлен запрос, URL-адрес страницы, удостоверение пользователя и т.д. В примере показано обращение к свойствам объекта Request и вызов метода MapPath объекта Request для выяснения абсолютного пути к странице на сервере:
Результат, отображаемый в браузере: 8. Можно писать код, принимающий решения Ключевая особенность динамических веб-страниц — возможность определять предстоящие действия на основе условий. Наиболее распространенный способ настройки такого режима — применение оператора If (и необязательного оператора Else).
Инструкция If IsPost — это сокращенное написание строки If IsPost = True. Помимо инструкций с If, существует целый ряд способов проверки условий, повторения блоков кода и т.д., которые описываются далее в этой главе. Результат, отображаемый в браузере после нажатия кнопки Submit (Отправить): Методы HTTP GET и POST и свойство IsPost Протокол, используемый для веб-страниц (HTTP), поддерживает весьма ограниченное число методов ("глаголов"), применяемых для создания запросов к серверу. Два наиболее распространенных запроса — это GET, используемый для чтения страницы, и POST, применяемый для отправки страницы. В общем, когда пользователь в первый раз запрашивает страницу, применяется метод GET. Если пользователь заполняет форму и затем нажимает кнопку Submit (Отправить), браузер передает на сервер запрос POST. В веб-программировании часто полезно знать, каким методом — GET или POST — запрашивается страница, чтобы понять, как ее обрабатывать. Чтобы определить метод запроса (GET или POST), на веб-страницах ASP.NET можно воспользоваться свойством IsPost. Если запрос создан методом POST, свойство IsPost возвратит значение true, а пользователь сможет выполнять такие действия, как чтение значений в текстовых полях формы. Многие примеры в этом пособии показывают, как обрабатывать страницу различными способами в зависимости от значения свойства IsPost.. Пример простого кода Ниже демонстрируется способ создания страницы, иллюстрирующий основные методы программирования. В данном примере создается страница, позволяющая пользователям ввести два числа, после чего эти числа складываются, и отображается результат.
Язык и синтаксис Visual Basic Глава 1. Начало работы с WebMatrix бета-версии и веб-страницами ASP.NET содержит простейший пример создания веб-страницы ASP.NET и добавления серверного кода в разметку HTML. Здесь будут разъяснены основы использования Visual Basic для написания серверного кода ASP.NET с применением синтаксиса (т.е. правил языка программирования) Razor. Пользователю, имеющему опыт программирования (особенно использования языков C, C++, C#, Visual Basic или JavaScript), многое из изложенного здесь будет знакомо. В этом случае, вероятно, потребуется лишь ознакомиться с методикой добавления кода WebMatrix в VBHTML-файлы разметки. Простой синтаксис Объединение текста, разметки и кода в блоках кода В блоках серверного кода зачастую требуется объединять серверный код, текст и разметку. При этом платформа ASP.NET должна различать их. Далее приведены наиболее распространенные способы объединения содержимого в строках.
Оператор @: достаточно использовать в строке один раз.
Примечание. ASP.NET никогда не отображает теги <text>на выходной странице, возвращаемой в браузер. Эти теги используются только на сервере, чтобы позволить ASP.NET отличить текст от кода..
HTML-кодировка При добавлении символа @ в блоки кода ASP.NET выполняет HTML-кодировку выходных данных. При этом зарезервированные символы HTML (такие как < and > и &) заменяются кодами, которые обеспечивают правильное отображение символов на веб-странице. Без HTML-кодировки результат применения серверного кода может отображаться неправильно и сделать страницу уязвимой для угроз безопасности. Дополнительные сведения о HTML-кодировке см. в Глава 4. Работа с формами. Пробелы Лишние пробелы в инструкции (и вне строкового литерала) не влияют на инструкцию.
Разбиение длинных инструкций на несколько строк Длинную инструкцию кода можно разбить на несколько строк с помощью символа подчеркивания "_" (который в Visual Basic называется символом объединения), вставляемого после каждой строки кода. Чтобы разбить инструкцию с продолжением на следующей строке, в конце строки добавьте пробел и символ объединения. Продолжите инструкцию на следующей строке. Инструкции можно разбивать на столько строк, сколько потребуется для улучшения удобочитаемости. Приведенные ниже инструкции одинаковы:
Однако разбивать строку в середине срокового литерала нельзя. Код в следующем примере не работает:
Для соединения длинной строки, разбитой на несколько строк, как показано выше, потребуется оператор сцепления (&), использование которого будет продемонстрировано далее в этой главе. Комментарии в коде Комментарии дают возможность оставлять заметки для самого программиста или для других пользователей. Перед комментарием длиной в одну строку помещают одинарную кавычку ('); в конце строки специальный символ не предусмотрен.
Переменные Переменная — это именованный объект, который служит для хранения данных. Именовать переменную можно как угодно, однако имя должно начинаться с алфавитного символа и не может содержать пробелы или зарезервированные символы. Как было показано выше, в Visual Basic регистр букв в имени переменной не имеет значения. Переменные и типы данных Переменная может относиться к определенному типу данных, указывающему, данные какого рода хранятся в этой переменной. Существуют строковые переменные, в которых хранятся строковые значения (например, "Hello world"), целочисленные переменные, в которых хранятся целочисленные значения (например, 3 или 79), и переменные дат, в которых хранятся значения дат в различных форматах (например, 4/12/2010 или March 2009). Предусмотрены и другие типы данных, которые можно использовать. Однако указывать тип для переменной не требуется. В большинстве случаев ASP.NET может распознать тип на основании того, как используются данные в переменной. (Иногда указывать тип все же приходится; в данном пособии можно увидеть примеры этого.) Чтобы объявить переменную без указания типа, используют ключевое слово Dim вместе с именем переменной (например, Dim myVar). Чтобы объявить переменную и указать тип, используют ключевое слово Dim в сочетании с именем переменной, за которыми следует As и имя типа (например, Dim myVar As String).
В приведенном ниже примере показаны некоторые выражения встроенного кода, использующие переменные на веб-странице.
Результат, отображаемый в браузере: Преобразование и тестирование типов данных Обычно ASP.NET определяет тип данных автоматически, однако иногда сделать это не удается. Поэтому может потребоваться выполнить явное преобразование. Даже если в преобразовании типов нет необходимости, иногда полезно выполнить проверку, чтобы выяснить, с каким типом данных придется работать. Порой преобразовать тип переменной бывает необходимо. Наиболее распространенный случай — необходимость преобразования строки в другой тип, такой как целое число или дата. Ниже приведен пример типичной ситуации, когда требуется преобразовать строку в число:
Как правило, пользователь вводит данные строкового типа. Даже если пользователю предложено ввести число и даже если он ввел цифру, все же при передаче и чтении в коде данные, введенные пользователем, оказываются в строковом формате. Поэтому строку приходится преобразовывать в число. В этом примере при попытке выполнить арифметическое действие со значениями без предварительного преобразования выводится следующее сообщение об ошибке, поскольку ASP.NET не удается сложить две строки: Неявное преобразование типа "string" в "int" невозможно. Для преобразования значений в числа необходимо вызвать метод AsInt. Если преобразование выполнено успешно, можно затем сложить числа. В приведенной ниже таблице перечислены некоторые распространенные методы преобразования и тестирования переменных.
Операторы Оператор — ключевое слово или символ — сообщает ASP.NET, команду какого типа предстоит выполнить в выражении. Visual Basic поддерживает значительное число операторов, но чтобы приступить к разработке веб-страниц ASP.NET, достаточно распознавать лишь некоторые их них. В представленную ниже таблицу сведены наиболее распространенные операторы.
Пути к файлам и папкам в коде Зачастую в коде приходится иметь дело с путями к файлам и папкам. Вот пример физической структуры папок веб-сайта, как она может выглядеть на мониторе компьютера разработчика:
На веб-сервере веб-сайт также имеет виртуальную структуру папок, которая соотносится (сопоставляется) с физическими папками на сайте. Имена виртуальных папок по умолчанию совпадают с именами физических папок. Виртуальный корневой каталог представлен косой чертой (/), точно так же, как корневая папка на диске C: компьютера обозначена обратной косой чертой (\). (В путях к виртуальным папкам всегда используются косые черты.) Так выглядят физический и виртуальный пути к файлу StyleSheet.css из структуры папок, приведенной ранее: Физический путь: C:\WebSites\MyWebSiteFolder\styles\StyleSheet.css Виртуальный путь (начиная с пути к виртуальному корневому каталогу /): /styles/StyleSheet.css При работе с файлами и папками в коде иногда возникает потребность сослаться на физический путь, а иногда — на виртуальный, в зависимости от обрабатываемых объектов. ASP.NET предоставляет следующие средства для работы с путями к файлам и папкам: оператор ~, методы Server.MapPathи Href. Оператор ~. Обозначение виртуального корневого каталога В серверном коде для указания пути от виртуального корневого каталога к папкам или файлам применяется оператор ~. Наличие этого оператора дает возможность переместить веб-сайт в другую папку или другое местоположение, не нарушая путей в коде.
Метод Server.MapPath. Преобразование виртуальных путей в физические Метод Server.MapPath преобразует виртуальный путь (например, /default.cshtml) в абсолютный физический путь (например, C:\WebSites\MyWebSiteFolder\default.cshtml). Этот метод применяется в операциях, для которых требуется полный физический путь, таких как чтение или запись текстового файла на веб-сервере. (Абсолютный физический путь к сайту на сервере сайта размещения обычно неизвестен.) Методу передается виртуальный путь к файлу или папке, и он возвращает физический путь.
Метод Href. Создание путей к ресурсам сайта Метод Href объекта WebPage преобразует созданные в серверном коде пути (которые могут включать оператор ~) в пути, понятные браузеру. (Браузер не распознает оператор ~, поскольку этот оператор применяется исключительно в ASP.NET.) Метод Href служит для создания путей к таким ресурсам, как файлы изображений, другие веб-страницы и CSS-файлы. Например, можно применить этот метод в разметке HTML к атрибутам элементов <img>, элементов <link> и элементов <a>.
Условная логика и циклы Серверный код ASP.NET позволяет выполнять операции на основе условий и писать код, повторяющий инструкции определенное количество раз (циклов). Проверка условий Чтобы проверить простое условие, применяется инструкция If...Then, которая по результатам заданного теста возвращает значение True или False.
Блок начинается с ключевого слова If. Тест как таковой (условие) следует за ключевым словом If и возвращает true или false. Инструкция If заканчивается оператором Then. Инструкции, которые запустятся, если проверка возвратит значение true, ограничены ключевыми словами If и End If. Инструкция If может включать блок Else, в котором заданы инструкции, которые запустятся, если условие окажется неверным:
Если блок начинается с оператора If, то не требуется применять обычные операторы Code...End Code для ограничения блоков. Вполне достаточно простого добавления в блок символа @. Этот метод работает с ключевым словом If, равно как и с другими ключевыми словами программирования на языке Visual Basic, помещаемыми перед блоками, в том числе For, For Each, Do While и др.
В этом примере если первое условие в блоке If неверно, то проверяется условие ElseIf. Если это условие подтверждается, то выполняются инструкции в блоке ElseIf. Если ни одно из условий не подтверждается, то выполняются инструкции в блоке Else. В код можно добавить любое число блоков ElseIf, а в конце поместить блок Else в качестве условия "все остальное". Для проверки большого количества условий применяют блок Select Case:
Проверяемое значение заключается в скобки (например, переменная weekday). В каждом отдельном цикле проверки применяется инструкция Case, в которой указывается значение. Если значение в инструкции Case совпадает с проверяемым значением, то выполняется код в этом блоке Case. Результат двух последних условных блоков отображается в браузере: Циклический код Зачастую приходится многократно выполнять одни и те же инструкции. Это осуществляется посредством запуска цикла. Например, часто запускаются одни и те же инструкции для каждого элемента в коллекции данных. Если точно известно, сколько раз необходимо повторить цикл, можно применить цикл For. Цикл такого рода особенно полезен при прямом или обратном отсчете.
Цикл начинается с ключевого слова For, за которым следуют три важных элемента.
Внутри цикла For разметка при каждом повторе цикла создает новый абзац (элемент <p>) и устанавливает для него размер шрифта, равный текущему значению i (счетчика). После запуска этой страницы пример кода создаст 11 строк сообщений, в каждой из которых размер шрифта на единицу больше, чем в предыдущей. При работе с коллекцией или массивом часто используется цикл For Each. Коллекция представляет собой группу схожих объектов, и цикл For Eachпозволяет выполнить операцию с каждым элементом коллекции. Этот тип цикла подходит для коллекций, поскольку, в отличие от цикла For, он не предполагает увеличения значения счетчика или установления ограничения итераций. Вместо этого в цикле For Each код просто последовательно проходит по всей коллекции до конца. Этот пример кода возвращает компоненты коллекции Request.ServerVariables, которая содержит сведения о веб-сервере. Цикл For Each используется для отображения имени каждого элемента посредством создания нового элемента <li> в маркированном списке HTML.
За ключевым словом For Each следует переменная, представляющая отдельный элемент коллекции (в данном примере — myItem), затем ключевое слово In и коллекция, к которой предполагается применить цикл. Внутри цикла For Each можно получить доступ к текущему элементу с помощью ранее объявленной переменной. Для создания более универсального цикла применяют оператор Do While.
Этот цикл начинается с ключевого слова Do While, за которым следует условие и блок кода, который будет повторяться. Циклы обычно увеличивают (прибавляют к значению) или уменьшают (вычитают из значения) переменную или объект, используемые для отсчета. В данном примере оператор += прибавляет 1 к значению переменной при каждом выполнении цикла. (Для уменьшения переменной в цикле, в котором ведется обратный отсчет, применяется оператор декремента -=.) Объекты и коллекции Почти все элементы на веб-сайте ASP.NET являются объектами, включая и саму веб-страницу. В этом разделе рассматриваются некоторые важные объекты, с которыми часто приходится работать в коде. Объекты Page Важнейшим базовым объектом в ASP.NET является страница. К свойствам объекта Page можно обращаться напрямую без какого-либо квалифицирующего объекта. Следующий код получает путь к файлу страницы с помощью объекта Request страницы.
С помощью свойств объекта Page можно получить различные сведения (см. далее).
Объекты коллекций (массивы и словари) Коллекция — это группа объектов одного типа, например коллекция объектов Customer из базы данных. В ASP.NET содержится много встроенных коллекций, таких как коллекция Request.Files. Работать с данными в коллекциях приходится часто. Два распространенных типа коллекций — массив и словарь. Массив полезен, когда требуется сохранить коллекцию однотипных элементов, не создавая при этом отдельной переменной для хранения каждого элемента.
При работе с массивами объявляют конкретный тип данных, например String, Integer или DateTime. Чтобы указать, что переменная может содержать массив, к имени переменной в объявлении добавляют пару круглых скобок (например, Dim myVar() As String). Для обращения к элементам в массиве используют их положение (в индексе) или оператор For Each. В индексах массивов отсчет ведется от нуля, то есть первый элемент занимает положение 0, второй — положение 1 и так далее.
Число элементов в массиве определяют посредством получения его свойства Length. Положение конкретного элемента в массиве определяют (то есть выполняют поиск по массиву) посредством метода Array.IndexOf. В массиве можно также выполнить такие операции, как расположение содержимого в обратном порядке (методом Array.Reverse) или сортировка содержимого (методом Array.Sort). Результат кода массива строк, отображаемый в браузере: Словарь — это коллекция пар "ключ/значение", в которой указывают ключ (или имя), чтобы задать или извлечь соответствующее значение.
Для создания словаря применяют ключевое слово New, указывающее, что создается новый объект Dictionary. Словарь можно назначить переменной с помощью ключевого слова Dim. Типы данных элементов в словаре указывают с помощью скобок "( )". В конце объявления необходимо добавить еще одну пару скобок, поскольку это, по существу, — метод, создающий новый словарь. Для добавления элементов в словарь вызывают метод Add переменной словаря (в данном случае — myScores), а затем указывают ключ и значение. Кроме того, можно применить скобки для указания ключа и выполнить простое назначение, как показано в следующем примере:
Чтобы получить значение из словаря, указывают ключ в круглых скобках.
Обработка ошибок Инструкции Try-Catch Зачастую инструкции в коде дают сбой по не зависящим от пользователя причинам, как в следующих примерах.
В терминах программирования такие ситуации называют исключениями. Если при выполнении кода возникает исключение, код создает (выводит) сообщение об ошибке, которое, в лучшем случае, раздражает пользователей. Сообщение об ошибке, созданное исключением Чтобы избежать появления подобных сообщений об ошибках, можно применить инструкции Try/Catch. В инструкции Try запускается проверяемый код. В одной или нескольких инструкциях Catch можно найти конкретные ошибки (конкретные типы исключений), которые, возможно, возникли. Для поиска ожидаемых ошибок в код можно включить столько инструкций Catch, сколько потребуется. В следующем примере показана страница, которая создает текстовый файл по первому запросу и затем отображает кнопку, позволяющую пользователю открыть этот файл. Чтобы вызвать исключение, в примере умышленно искажено имя файла. Код содержит инструкции Catch для двух возможных исключений: FileNotFoundException, которое возникает из-за неверного имени файла, и DirectoryNotFoundException, которое возникает, если ASP.NET не удается даже найти папку. (Чтобы увидеть, как выполняется пример кода, если в нем все работает надлежащим образом, можно раскомментировать инструкцию.) Если код не обработал исключение, на экран выводится страница ошибки, как на предыдущем снимке экрана. Вместе с тем, раздел кода Try/Catch избавляет пользователя от появления на экране сообщений об ошибках этих типов.
|