Что такое код asp notdeletable


Содержание

Веб-элементы управления

Серверные элементы управления HTML предлагают относительно быстрый, но не наилучший способ миграции на ASP. NET, поскольку имена элементов управления HTML и их атрибуты не всегда интуитивно понятны и не обладают одинаковой поддержкой на этапе проектирования для связывания с обработчиками событий. Элементы управления HTML также обладают определенными ограничениями, например, свойства стилей должны устанавливаться с применением синтаксиса CSS (более сложного, чем установка прямого свойства), а события изменения не могут генерироваться до тех пор, пока страница не будет отправлена в ответ на другое действие.

Наконец, серверные элементы управления HTML не могут предоставить элементы пользовательского интерфейса, которые пока не определены стандартом HTML. Если вы собираетесь создать какой-либо групповой элемент управления, использующий сочетание элементов HTML для построения сложного интерфейса, вам придется делать это самостоятельно.

Для решения этих проблем ASP.NET предоставляет высокоуровневую модель веб-элементов управления. Все веб-элементы управления определены в пространстве имен System.Web.UI.WebControls и являются производными от базового класса WebControl, реализующего более абстрактную и согласованную модель, чем модель серверных элементов управления HTML. Веб-элементы управления также поддерживают дополнительные средства, такие как автоматическая обратная отправка. Но действительно примечательным является то, что многие усовершенствованные элементы управления не просто отображаются на отдельный HTML-дескриптор, но генерируют более сложный вывод, состоящий из нескольких HTML-дескрипторов и JavaScript-кода. В качестве примеров можно привести списки флажков, переключатели, календари, редактируемые сетки и т.д.

Ниже показана часть иерархии наследования веб-элементов управления:

Базовый класс WebControl

Все веб-элементы управления унаследованы от класса WebControl. Сам класс WebControl, в свою очередь, наследуется от Control. Поэтому многие его свойства и методы, например, Controls, Visible и FindControl(), похожи на свойства и методы серверных элементов управления HTML. Однако класс WebControl добавляет еще и свойства, перечисленные ниже:

Свойства класса WebControl

Свойство Описание
AccessKey Возвращает или устанавливает сокращенную клавиатурную комбинацию, позволяющую быстро переместиться на элемент управления. Например, при установке в А пользователь может переместить фокус на этот элемент управления, нажав комбинацию
BackColor Возвращает или устанавливает цвет фона
BorderColor Возвращает или устанавливает цвет границы
BorderStyle Одно из значений перечисления BorderStyle: Dashed, Dotted, Double, Groove, Ridge, Inset, Outset, Solid и None
BorderWidth Возвращает или устанавливает ширину границы
CssClass Возвращает или устанавливает стиль CSS для элемента управления. Стиль CSS может быть определен в разделе в верхней части страницы или же в отдельном файле CSS, на который ссылается страница
Enabled Возвращает или устанавливает активизированное состояние элемента управления. При значении false элемент управления становится неактивным (отображается серым цветом)
Font Возвращает объект со всей информацией о стилях шрифта, используемого для текста элемента управления
ForeColor Возвращает или устанавливает цвет изображения, например, цвет текста элемента управления
Height Возвращает или устанавливает высоту элемента управления
TabIndex Число, позволяющее управлять порядком обхода по клавише . Элемент управления с нулевым TabIndex получает фокус при первой загрузке страницы. Нажатие клавиши перемещает пользователя на элемент управления со следующим наиболее низким TabIndex при условии, что он активен. Это свойство поддерживается только в браузере Internet Explorer 4.0 и в последующих его версиях
Tooltip Отображает текстовое сообщение, когда пользователь наводит на элемент управления курсор мыши. Во многих более старых браузерах это свойство не поддерживается
Width Возвращает или устанавливает значение ширины элемента управления

Многие из этих свойств заключают в себе атрибуты стиля CSS наподобие цвета изображения либо фонового цвета, шрифта, высоты, ширины и прочего. Эти свойства позволяют намного проще конфигурировать внешний вид веб-элемента управления и уменьшают вероятность ошибок.

Базовые классы веб-элементов управления

В состав ASP.NET входят веб-элементы управления, дублирующие каждый из серверных элементов управления HTML и предоставляющие точно такие же функциональные возможности. Эти веб-элементы управления унаследованы от класса WebControl и вдобавок имеют ряд собственных свойств и событий. Все они кратко перечислены в следующей таблице:

Базовые классы веб-элементов управления

.
Объявление дескриптора ASP.NET Генерируемая HTML-разметка Ключевые члены
или Text, CausesValidation, PostBackUrl, ValidationGroup, событие Click
AutoPostBack, Checked, Text, TextAlign, событие CheckedChanged
FileBytes, FileContent, FileName, HasFile, PostedFile, SaveAs()
Value
. ImageUrl, NavigateUrl, Target, Text
AlternateText, ImageAlign, ImageUrl
CausesValidation, ValidationGroup, событие Click
HotSpotMode, HotSpots (коллекция), AlternateText, ImageAlign, ImageUrl
. Text, AssociatedControlID
Text, CausesValidation, ValidationGroup, событие Click
BackImageUrl, DefaultButton, GroupingText, HorizontalAlign, Scrollbars, Wrap
AutoPostBack, Checked, GroupName, Text, TextAlign, событие CheckedChanged
.
BackImageUrl, CellPadding, Cellspacing, GridLines, HorizontalAlign, Rows (коллекция)
. ColumnSpan, HorizontalAlign, RowSpan, Text, VerticalAlign, Wrap
Cells (коллекция), HorizontalAlign, VerticalAlign
или AutoPostBack, Columns, MaxLength, Readonly, Rows, Text, TextMode, Wrap, событие TextChanged

Все свойства веб-элементов управления интуитивно понятны. Одной из целей веб-элементов управления является упрощение установки атрибутов элемента управления с помощью свойств с согласованными именами без необходимости думать о деталях их преобразования в код HTML (хотя хорошее знание HTML, безусловно, поможет).

Для начала ознакомления с некоторыми ключевыми отличиями между серверными элементами управления HTML и веб-элементами управления рассмотрим следующий дескриптор веб-элемента управления:

По сути, этот дескриптор генерирует текстовое поле шириной в 250 пикселей, с красным цветом переднего плана и светло-желтым цветом фона. Текст выводится шрифтом Verdana размером 20 и полужирным начертанием. Ниже описаны различия между предыдущим объявлением и соответствующим объявлением дескриптора HTML:

Элемент управления объявляется с использованием имени класса (TextBox) вместо имени дескриптора HTML (input).

Содержимое по умолчанию устанавливается с помощью свойства Text, а не менее очевидного атрибута Value.

Атрибуты стилей (цвета, ширина и шрифт) устанавливаются через прямые свойства вместо группировки их в одном атрибуте стиля.

В объявлении каждого элемента управления обязательно должен либо присутствовать соответствующий закрывающий дескриптор, либо использоваться /> (синтаксис пустого элемента) в конце открывающего дескриптора. Другими словами, дескрипторы ASP.NET следуют тем же правилам, что и дескрипторы XHTML. Если не закрыть дескриптор, во время выполнения обязательно возникнет ошибка. Тем не менее, нарушение этого правила при работе с серверными элементами управления HTML ни к каким неблагоприятным последствиям не приводит.

Все веб-элементы управления должны объявляться внутри дескриптора серверной формы (и может существовать только одна серверная форма на страницу), даже если они не вызывают обратной отправки. В противном случае вы получите ошибку времени выполнения. Это правило необязательно при работе с серверными элементами управления HTML в отсутствие необходимости обработки обратных отправок.

Если запросить страницу с таким дескриптором, то при ее визуализации соответствующий элемент управления будет преобразован в следующий дескриптор HTML:

Единицы измерения

Все свойства элементов управления, использующие размеры, в том числе BorderWidth, Height и Width, требуют структуры Unit, комбинирующей числовое значение с единицей измерения (пиксели, проценты и т.п.). Это означает, что при установке этих свойств в дескрипторе элемента управления вы должны добавить к числу рх (для пикселей) или % (для процентов) для указания типа единицы измерения.

Ниже приведен пример с элементом управления Panel, высота которого равна 300 пикселей, а ширина составляет 50 процентов размера текущего окна браузера:

При установке основанного на единицах свойства в коде необходимо использовать один из статических методов типа Unit. Применяйте Pixel() для значения в пикселях и Percentage() — для значения в процентах:

Перечисления

Перечисления активно используются в библиотеке классов .NET для группирования наборов связанных констант. Например, при установке свойства BorderStyle элемента управления можно выбрать одно из нескольких предопределенных значений из перечисления BorderStyle. В коде перечисление задается с использованием точечного синтаксиса:

В файле .aspx перечисление устанавливается за счет указания в строке одного из допустимых значений. Имя перечислимого типа не задается, а определяется автоматически.

Цвета

Свойство Color относится к объекту Color из пространства имен System.Drawing. Объекты Color можно создавать несколькими способами:

Использование цветового значения ARGB (альфа-канал, красная, зеленая и синяя составляющие). Каждое значение задается в виде целого числа.

Использование предопределенного в .NET имени цвета. Из класса Color выбирается свойство с соответствующим именем, доступное только для чтения. Эти свойства включают все цвета HTML.

Использование имени цвета HTML. Это значение задается в виде строки с использованием класса ColorTranslator.

Для использования одного из этих методов потребуется импортировать пространство имен System.Drawing:

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

Полный список имен цветов можно найти в документации Visual Studio. В качестве альтернативы можно использовать шестнадцатеричное представление цвета (в формате # ), как показано ниже:

Шрифты

Свойство Font в действительности ссылается на полный объект FontInfo, определение которого содержится в пространстве имен System.Web.UI.WebControls. Каждый объект FontInfo имеет несколько свойств, которые определяют имя, размер и стиль шрифта. Хотя свойство WebControl.Font доступно только для чтения, все свойства FontInfo (перечисленные ниже) можно изменять:

Свойства FontInfo

Свойство Описаниеs
Name Строка, обозначающая имя шрифта (например, Verdana)
Names Массив строк с именами шрифтов, которые упорядочиваются согласно имеющимся предпочтениям
Size Размер шрифта в форме объекта FontUnit. Может представлять абсолютный или относительный размер
Bold, Italic, Strikeout, Underline и Overline Булевские свойства, которые либо применяют данный атрибут стиля, либо игнорируют его

В коде можно присваивать значения различным свойствам шрифта:

В файле .aspx следует применять специальный синтаксис прохода по объекту для определения таких свойств объекта, как шрифт. Синтаксис прохода по объекту использует дефис (-) для разделения свойств.

Конечно, в мире Интернета имена шрифтов являются просто рекомендациями. Если данный шрифт отсутствует на компьютере клиента, браузер пытается заменить его похожим шрифтом.

Чтобы предоставить список возможных шрифтов, вместо свойства FontInfo.Name необходимо использовать свойство FontInfo.Names. Свойство Names принимает в качестве значения массив имен, которые будут визуализироваться в виде упорядоченного списка (причем наиболее предпочитаемые имена будут отображаться в самом верху этого списка). Например:

Свойства Names и Name поддерживаются в синхронизированном состоянии, и установка значения для одного из них обязательно влияет на другое. Например, когда устанавливается значение для свойства Names, свойству Name автоматически присваивается первый элемент из массива, который был указан для свойства Names. Если же устанавливается значение для свойства Name, свойству Names автоматически присваивается массив, состоящий из единственного элемента. Поэтому использовать нужно только либо Name, либо Names, но ни в коем случае не оба свойства одновременно.

Фокус

В отличие от серверных элементов управления HTML, каждый веб-элемент управления предоставляет метод Focus(). Фокус оказывает влияние только на элементы управления вводом (элементы управления, принимающие нажатия клавиш от пользователя). После визуализации страницы в клиентском браузере пользователь начинает работу с элемента управления, имеющего фокус.

Например, если есть форма, позволяющая редактировать информацию о клиенте, вы можете вызвать метод Focus() для первого текстового поля с информацией об адресе клиента. В результате курсор немедленно появится в этом текстовом поле. Если это текстовое поле частично находится в нижней части формы, страница автоматически прокручивается до необходимого положения.

После визуализации страницы пользователь может перемещаться между элементами управления с использованием хорошо известной клавиши .

Конечно, если вы знакомы со стандартом HTML, то знаете, что не существует встроенного способа передачи фокуса элементу управления вводом. В этом следует полагаться на JavaScript-код. Здесь-то и кроется секрет реализации ASP.NET. В конце сгенерированного кода страницы ASP.NET добавляет дополнительный блок JavaScript-кода. Этот JavaScript-код просто устанавливает фокус на последний элемент управления с инициированным методом Focus().

Ниже показан код, который ASP.NET добавит к визуализируемой веб-странице для перемещения фокуса на элемент управления по имени TextBox2:

Если вы вообще не вызывали метод Focus(), этот код не генерируется. Если вы вызывали его для нескольких элементов управления, то JavaScript-код выбирает элемент управления, получивший фокус раньше других.

Вместо программного вызова метода Focus() установить элемент управления, который должен всегда иметь фокус, можно в разметке. Это делается с помощью свойства DefaultFocus следующим образом:

Обработчик событий просто добавляет новое сообщение в окно списка и прокручивает его в конец:

Автоматическая обратная отправка не всегда приносит только пользу. Отправка страницы обратно серверу на некоторое время прерывает работу пользователя. Если страница имеет большие размеры, задержка в работе может стать довольно заметной. Если страница является довольно длинной, и пользователь успел прокрутить ее до конца, то при ее обновлении он утратит текущую позицию и будет снова возвращен в начало страницы. Из-за этих особенностей всегда лучше тщательно взвешивать, действительно ли обратная отправка столь необходима, и стараться не применять ее просто в «косметических» целях. В качестве одного из альтернативных вариантов можно использовать вместо нее функциональные возможности AJAX.

Что такое код asp notdeletable

Этот текст предназначен для тех, кто никогда не имел дела с ASP и вообще смутно себе представляет возможности программирования на стороне сервера. Я ставил себе задачу создать у читателя общее представление о предмете. Отдельные неточности при этом менее важны — пожалуйста, громко не ругайтесь.

Общие сведения

ASP (Active Server Pages) – это мощная технология от Microsoft, позволяющая легко разрабатывать приложения для WWW. ASP работает на платформе Windows NT и IIS (Internet Information Server), начиная с версии 3, хотя вроде есть реализации на других платформах. ASP – это не язык программирования, это внутренняя технология, позволяющая подключать программы к Web-страницам. Основа успеха ASP – простой скриптовый язык (Visual Basic Script или Java Script) и возможность использования внешних COM-компонент.

Как это все происходит?

Вы пишете программу и складываете в файл на сервере. Браузер клиента запрашивает файл. Файл сначала интерпретируется сервером, на выходе производится HTML-код. Этот HTML посылается клиенту. Файлы с программами имеют расширение .asp. Файлы asp – это обычные текстовые файлы, содержащие исходные тексты программ. Файлы делаются с помощью любого текстового редактора. Каталог, в котором размещены файлы asp должен иметь права на выполнение, так как сервер исполняет эти файлы, когда браузер их запрашивает. Собственно программы пишутся на любом скриптовом языке, который установлен в системе. По умолчанию поддерживаются VBScript и JavaScript. Можно доустановить другие (например, Perl). Если ничего специально не указывать используется VBScript. В дальнейшем будем ссылаться только на него. Программные фрагменты заключаются в скобки . Можно ставить открывающую скобку в начале файла, закрывающую – в конце, все что между ними – программа на Visual Basic’е.

Какие средства есть для программирования?

Web – нормальная среда программирования, если правильно понять, что есть что. В VBScript есть все нормальные конструкции структурного программирования (if, while, case, etc). Есть переменные (описывать не обязательно, тип явно не задается). Поддерживаются объекты. Работа с ними обычная – Object.Property, Object.Method. Есть ряд встроенных объектов (Request, Response, Session, Server, Connection, Recordset). Можно доустанавливать другие компоненты (скачивать, покупать, программировать), например для работы с электронной почтой.

Вывод

Понятия «экран», куда можно выводить данные нет. Все, что надо показать пользователю, выбрасывается в выходной поток на языке HTML. Браузер пользователя интерпретирует этот HTML. Для упрощения вывода существует объект Response . Вывод осуществляется с помощью метода Write .

Так производится запись во внутренний буфер объекта Response. Когда скрипт заканчивает работу, весь буфер выдается клиенту. Надо заметить, что клиент получает «чистый» HTML, таким образом программы на ASP не зависят от клиентского ПО, что очень важно. Если внутри выводимой строки нужно использовать кавычку, кавычка удваивается. Другие методы и свойства Response позволяют управлять выводом. Так Response.Buffer регулирует, получает ли клиент данные по мере из записи в Response, или все сразу по завершении исполнения страницы. Метод Response.Redirect перенаправляет браузер на другую страницу. Чтобы им пользоваться, нельзя до него на странице использовать Response.Write.

Программа на ASP не может явно спросить пользователя о чем-то. Она получает данные из других страниц, либо через URL. Передаваемые параметры помещаются во входной поток и доступны через объект Request . Чтобы передать переменную var в программу test.asp , надо написать:

Чтобы из программы получить значение этой переменной, надо написать:

Несколько переменных разделяется знаком &:

Кроме того, чтобы задавать параметры в URL, можно воспользоваться формами HTML. В вызывающей странице пишем так:

Так это выглядит:

При этом пользователь увидит форму из одного поля ввода (var1), в нем будет значение по умолчанию «default». Второе поле (var2) будет невидимо и будет передавать всегда фиксированное значение «var2value». Кнопка «Submit Form» завершает заполнение формы и передает все переменные на test.asp (action). Если method=»get», переменные передаются через URL (test.asp?var1=default&var2=var2value). Если method=»post», передаются вместе с запросом так, что внешне передача переменных не заметна. В вызываемой программе безразлично, какой метод изпользовался (почти). Если у вас нет специальных аргументов за метод GET, используйте метод POST.

Формы



Формы HTML используются для организации диалога с пользователем. Поддерживаются стандартные элементы управления. Все многообразие задается немногими тэгами:

  • INPUT (с параметром TYPE=)
  • SELECT
  • TEXTAREA

Описание – в документации по HTML.

Взаимосвязь между отдельными страницами

Обычно сервер WWW не хранит состояние приложения, т.е. все запросы взаимонезависимы, и нет стандартного способа понять, что несколько запросов пришли от одного и того же пользователя. Но это очень нужно для разработки полноценных приложений и является одной из главных проблем разработки Web-приложений.

Один из методов решения этой проблемы — cookies . Пользователю при первом обращении выдается специальный идентификатор, после этого браузер пользователя предъявляет этот идентификатор при каждом обращении, и сервер может распознать, что это тот же самый пользователь. Пользователь может отключить cookies, в этом случае этот метод не работает.

ASP, используя cookies, предоставляет программисту более простое средство — объект Session (сессия). Сессия стартует, когда новый пользователь обращается к любому asp-файлу приложения. Сессия заканчивается при отсутствии активности пользователя в течение 20 минут, либо по явной команде. Специальный объект Session хранит состояние сессии. Туда можно записывать переменные, которые доступны из любой страницы в этой сессии. Записать данные в этот объект можно просто:

Считать потом еще проще:

Сессия, таким образом, – это еще один метод передачи данных между страницами. Одна страница пишет данные в сессию, другая – берет потом оттуда.

Наряду с объектом Session существует объект Application . Если сессия создается для каждого нового пользователя, до Application существует в единственном экземпляре, и может использоваться всеми страницами приложения.

Управление приложением

Программисту предоставляется возможность реагировать на 4 события: старт/стоп приложения и старт/стоп каждой сессии. Для реализации этих событий предназначен файл global.asa , который должен располагаться в корневом каталоге приложения. Вот его примерный скелет:

Нужно «просто» вписать Ваш код на соответствующее место. Нужно заметить, что отлаживать код для global.asa довольно непросто, так как он выполняется при очень специфических обстоятельствах (к примеру при старте или остановке сервера).

Использование внешних компонент

Если на сервере установлены дополнительные компоненты, их можно использовать из ASP. Стандартные объекты (например из библиотек ADO (Connection и Recordset) и Scripting (Dictionary, FileSystemObject)) доступны всегда. Установка новой компоненты обычно состоит в копировании dll-файла в каталог на сервере и ее регистрации с помощью программы regsvr32.exe. [В COM+ используется своя процедура инсталляции объектов, это однако не влияет на использования объектов.]

Создать экземпляр объекта можно так:

Class.Object указываются в документации на компоненту. В переменной var запоминается ссылка на созданный экземпляр объекта. Когда объект не нужен, ссылку нужно обнулить с помощью команды:

Пожалуйста всегда обнуляйте все ссылки на объекты, когда они больше не нужны. Теоретически это должно происходить автоматически при завершении процедуры/страницы, однако в стандартной сборке мусора есть определенные «проблемы».

В остальном использование компоненты зависит от самой этой компоненты.

Работа с базами данных

Из ASP можно легко и просто работать с любыми базами данных. Это делается через две промежуточные технологии: ODBC и ADO.

ODBC позволяет организовать доступ к любым базам данных через унифицированный интерфейс с помощью языка SQL. Специфика конкретных СУБД учитывается при помощи специальных драйверов БД. Такие драйверы существуют для всевозможных СУБД (в частности SQL Server, Oracle, Access, FoxPro). Поддержка ODBC обеспечивается на уровне операционной системы Windows (NT). Настройка – через Control Panel/ODBC. Базовым понятием является источник данных или data source. Источник данных – это совокупность сведений о базе данных, включая ее драйвер, имя компьютера и файла, параметры. Чтобы пользоваться базой надо создать источник данных для нее. Важно, чтобы источник данных был «системным», в отличии от «пользовательского». После этого надо лишь знать имя источника данных. [В настоящее время ODBC отступает перед натиском технологии OLE DB. На практике это однако практически ничего не изменяет. Вместо имени источника данных нужно использовать Connection String, в которой указывается имя ODBC-драйвера и все его параметры.]

ADO – это совокупность объектов, доступных из ASP, позволяющих обращаться к источнику данных ODBC [или OLE DB]. Фактически нужны лишь 2 объекта – Connection , представляющий соединение с базой данных и Recordset , представляющий набор записей, полученный от источника. Сначала необходимо открыть соединение, потом к нему привязать Recordset, потом, пользуясь методами Recordset’а, обрабатывать данные. Вот пример:

Если команда SQL не возвращает данных, recordset не нужен, надо пользоваться методом Conn. Execute (SQL_COMMAND).

Если Вы хотите вызывать хранимые процедуры сервера БД с параметрами, нужно воспользоваться объектом Command , который в свою очеред содержит объекты Parameter .

Методики программирования, советы


Описание переменных

VBScript — очень нетребовательный к программисту язык. Так он не требует описывать переменные и не содержит явных типов данных. Все переменные принадлежат одному типу Variant . Из-за отсутствия описаний могут произойти очень трудно обнаруживаемые ошибки. Одна опечатка может стоить полдня поисков.

Однако, есть возможность явно потребовать описания переменных. Для этого первой строкой в ASP-файле нужно написать Option Explicit . После этого обращение к переменной, которая не была объявлена с помощью Dim , вызывает ошибку с указанием номера строки.

Кстати, где расположены описания Dim в процедуре — совершенно не важно. Они могут стоять как до использования переменной, так и после, и даже в цикле. Видимо они отрабатываются препроцессором. Явно задать тип переменной с помощью Dim Var as Typ , как в Visual Basic, все равно нельзя.

Чередование ASP/HTML

Если нужно выдать большой кусок HTML, можно не пользоваться Response.Write. Если в asp-файле встречается кусок текста вне скобок , он трактуется просто как HTML, который надо вывести. Пример:

Обработка ошибок

Для отслеживания ошибок используется специальный объект Err . Он устанавливается в ненулевое значение, если предыдущая команда породила ошибку. Ее можно проверять с помощью If, и таким образом реагировать на ошибки. Чтобы из-за ошибки не прерывалось выполнение программы, в начале нужно включить команду

Включение других файлов

Можно выносить повторяющийся код в отдельный файл, и подключать к разным другим по мере необходимости с помощью команды include . Это очень удобно, если вы хотите вынести повторяющийся код в отдельный файл и использовать снова и снова в разных страницах:

Важно: все includes в тексте отрабатываются до исполнения файла. Т.е. даже если include стоит внутри if, то сначала будут включены все includes во всех ветках, и только потом, во время исполнения, будет принятно решение, какую ветку выполнять. Т.е. следующий код не дает условного включения файлов:

Обработка форм

Если надо что-то спросить у пользователя и на основании этого что-то сделать, в простейшем случае создается два файла: один с формой, второй – с ее обработчиком. Обработчик выполняет все действия. Пример:

Рекурсивная обработка форм

Удобный метод состоит в том, чтобы сбор данных и обработку осуществлял один и тот же файл. Для этого пишется asp, в котором есть разные разделы. Специальная переменная отвечает за выбор раздела при запуске. Пример:

Переменные HTTP

Запрос от браузера, кроме запрашиваемой страницы несет еще некоторые данные. Эти данные, например, IP-адрес клиента, доступны через специальные переменные объекта Request. IP-адрес – Request(«REMOTE_ADDR»). Другие — см.документацию (ASPSamp\Samples\srvvar.asp).

Переадресация

Очень легко написать на ASP скрипт, который будет производить некоторые расчеты, и в зависимости от результатов переадресовывать браузер на разные URL (например, подставлять нужный баннер). Делается это так:

Только надо следить, чтобы до выполнения команды redirect ничего не было записано в Response (даже коментарии HTML).

Электронная почта

Одна из часто встречающихся задач – отправить электронную почту с Web-страницы. На первый взгляд, можно просто написать

Но это приводит к тому, что при отправке формы делается попытка на клиентской машине запустить почтовую программу и создать новое сообщение с данными формы. Если это не получается (почтовая программа не настроена, пользователь не отправил почту, и т.д.) — письмо и не будет отправлено. Гораздо надежнее работает серверное решение.

Для этого существуют внешние компоненты, есть и бесплатные. Например, компонента Jmail от Dimac. Все, что для нее нужно – это адрес SMTP-сервера. Вот пример ее использования:

Что такое код asp notdeletable

ASP – веб-технология, которую в декабре 1996 года представила компания Microsoft для возможности создания интерактивных веб-приложений. ASP – это аббревиатура от Active Server Pages, что переводится, в соответствии с логикой технологии, как «активные серверные страницы». Важно понимать, что ASP не является языком программирования, она только позволяет встраивать в обычный HTML-код сценарии на каком-либо скриптовом языке(Visual Basic Script или Java Script). Таким образом, за счет использования ASP на веб-страницы могут встраиваться элементы с заранее настроенным программным управлением.

Изначально в любом текстовом редакторе создается исходный код программы. По умолчанию используется Visual Basic – если ничего дополнительно не указывать, система будет считать, что программа написана именно на этом языке. Затем файл, которому задается расширение .asp, выкладывается в каталог, имеющий права на выполнение, чтобы сервер мог исполнить этот файл, когда браузер пользователя запросит его. Для пользователя этот файл не виден, поскольку сначала загруженный файл с программой интерпретирует сервер таким образом, что программный код будет отображаться непосредственно в HTML-коде страницы, в скобках вида скобки .

ASP просуществовала в чистом виде до 2002 года. 1 января этого года увидел свет релиз ASP.NET, технологии, в которой были учтены ошибки и недочеты ASP. Устранить их получилось благодаря тому, что новая технология была основана на более функциональной платформе Microsoft .NET.

Синонимы: нет
Все термины на букву «A»
Все термины в глоссарии

Почему ASP.NET не используют в крупных компаниях?

В настоящий момент С# (asp.net) имеет целый ряд преимуществ над тем, что нам дает Java (в плане удобства и синтаксиса языка). Это правда!

Проблема заключается в том, что Java появился раньше, Java был открытым для использования на Linux. В итоге под сервера на Java написали огромный список уникальных решений, которые сейчас используют топовые команды (посмотри, что такое хадуп, например). В итоге, компании либо не видели смысла переписывать все на C#, так как уже имели билды на Java, либо не хотели тратить время на разработку того, что уже есть на Java.

Именно по этой причине Microsoft сейчас активно начинает спариваться с Linux и везде кричит, что они его любят.

Пример страницы ASP.NET

В основу разработки Web-приложений на ASP.NET положена модель разделения кода представления и кода реализации, рекомендуемая Майкрософт при создании динамических документов. Страницы ASP.NET имеют расширение .aspx. Программный код может размещаться либо в отдельном файле, либо на странице внутри специального тэга для сценариев. Файл с кодом обычно имеет расширение .aspx.cs (.aspx.vb) и имя, совпадающее с именем основного ASPX файла.

Внедрение программного кода в страницу aspx похоже на то, что используется в обычных asp-страницах.

Страницы ASP.NET обычно содержат директивы, которые позволяют указать свойства и конфигурацию для страницы. Директивы используются ASP.NET в качестве инструкций, определяющих способ обработки страницы. Они не отображаются в разметке, которая отправляется клиенту.

Наиболее часто используется директива @ Page, с помощью которой можно задавать множество параметров:

серверный язык программирования для кода на странице;

место нахождения кода сервера (непосредственно в странице или в отдельном файле класса);

параметры отладки и трассировки.

имеет ли страница связанную главную страницу.

Если директива @ Page не включена в страницу, или если эта директива не включает определенные настройки, параметры наследуются из файла конфигурации для приложения (файл Web.config) или из файла конфигурации узла (файл Machine.config). Наиболее важные атрибуты директивы перечислены в таблице 4.1.

Атрибуты директивы @ Page

AutoEventWireup Автоматическая обработка событий страницы
Buffer Управляет буферизацией страницы. По умолчанию буферизуется
ClassName Позволяет назначать имя класса, сгенерированного данной страницей
CodeFile Название файла с отделенным кодом для данной страницы
Culture Устанавливает набор региональных параметров, т.е. язык, формат валюты, даты, чисел
Debug Если true, на страницу выводится отладочная информация
Trace Вывод трассировочной информации
EnableViewState Сохранение состояния страницы. По умолчанию она сохраняется
EnableTheming Позволяет включить или выключить поддержку тем оформления. По умолчанию включено
Inherits Класс, от которого наследуется класс данной страницы в технологии отделенного кода
IsAsync Показывает, обрабатывается ли страница асинхронно.
Language Язык, используемый во внедренном коде
WarningLevel Наибольший допустимый уровень предупреждений компилятора
CompilerOptions Опции компилятора

Кроме директивы @ Page, в текст можно включить другие директивы, которые содержат дополнительные параметры, специфичные для страницы.


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

Примечание! Для лучшего понимания сущности описываемых процессов действия по созданию файлов рекомендуется выполнять в простом редакторе (например, Блокнот).

Возьмем за основу такую статическую страницу:

ASP.NET — что это такое?

По всей видимости, рядовые пользователи, использующие компьютеры исключительно для повседневных нужд или в сфере развлечений, с таким понятием, как ASP.NET, сталкиваются вряд ли. Зато веб-разработчики всех уровней подготовки знают эту платформу достаточно хорошо, хотя некоторые из них и считают, что она, если можно так сказать, морально несколько устарела. Тем не менее стоит сделать небольшой экскурс в историю создания и развития технологии ASP.NET. Что это такое, многим рядовым пользователям станет понятно после прочтения ниже предлагаемого материала. При этом попытаемся отталкиваться от самых простых терминов, не особо вдаваясь в механизмы функционирования этого инструмента, чтобы каждый желающий мог сообразить, о чем, собственно, идет речь.

ASP.NET: что это такое?

И для начала остановимся на самом инструментарии. Вообще, считается, что ASP.NET является достаточно мощным инструментом для быстрого создания веб-приложений, который входит практически во все известные на сегодня версии платформы Microsoft .NET Framework.

Сам же инструментарий содержит специализированные средства в виде веб-сервисов, программной инфраструктуры и модели программирования.

Многие считают, что описываемая технология является некой наследницей ASP. В чем-то сходство, безусловно, есть, и именно поэтому, как считается, многие программисты могут с легкостью перейти с устаревшей платформы на использование более новой. Однако на самом деле различия между этими двумя средами более существенны, что особо сильно проявляется в организации внутренней структуры среды разработки и обеспечения безопасности. Несмотря на вроде бы кажущиеся современные подходы к созданию веб-страниц и приложений, которые заложены именно в этой платформе, многие программисты относятся к ней с явным недоверием, предпочитая средства PHP или что-то подобное. Некоторые отзывы свидетельствуют о том, что не спасает ситуацию даже улучшенная среда разработки ASP.NET Core. Так ли это, далее и попробуем выяснить.

Для чего используется ASP.NET на практике?

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

При всем этом нужно четко понимать, что все это очень сильно взаимосвязано именно с платформой Microsoft. NET Framework и работает исключительно в исполняемой среде (CLR Environment) на основе компилируемых языков. Чтобы было понятнее, попробуем посмотреть, что собой представляют статические и динамические страницы, а также особое внимание уделим вопросам безопасности.

Основные отличия динамических веб-страниц от статических

Итак, говоря о том, что это, ASP.NET можно охарактеризовать как расширенный набор инструментов, модулей и форм, позволяющий очень быстро создавать такие серверные веб-приложения, которые могли бы осуществлять динамическое взаимодействие между самим сервером, на котором расположена страница или сервис, и браузером, с которого пользователь входит в интернет. Но в чем отличие динамических и статических страниц? Статическая страница, написанная на HTML, изначально содержит только те элементы, которые были указаны непосредственно в ее коде, то есть во времени не изменяется. Но что делать, если вам потребовалось разработать страницу или приложение, в котором, например, будет заложено отображение каждодневного курса валют?

Если используется статическая страница, созданная «вчера», сегодня она уже будет устаревшей. А вот на динамической странице счетчик курса как раз и будет изменяться. Естественно, это только самый простой пример, поскольку технология на самом деле гораздо сложнее. К тому же, если вы уже заметили, при создании страниц и сервисов такого типа можно отметить и то, что в некотором смысле они являются самообновляемыми, благодаря наличию встроенных модулей, отслеживающих изменение того или иного параметра.

История создания

Первые упоминания об ASP.NET относятся к 1997 году, когда корпорацией Microsoft была реализована первая версия сервера IIS, что касалось исследований возможности своеобразного отделения содержания от оформления с целью написания, так сказать, «чистого» кода. Изначально проект носил название XSP, но что значила литера «Х» в сокращении, для многих до сих пор остается загадкой. Но тут нужно понимать, что сама технология базировалась в то время на запатентованной компанией Sun Microsystems общей среде программирования Java, поэтому нет ничего удивительного в том, что и сама платформа была написана именно на этом языке. зато с выходом исполняемой среды CLR (Common Language Runtime) и фреймворка .NET исходные принципы стали совершенствоваться, что и привело в конечном итоге к появлению инструментария ASP.NET, которым, невзирая на лица, пользуются многие современные программисты, кто бы там что ни говорил об устаревании платформы.

Принципы использования и безопасности

Что касается основных составляющих данной платформы, она позволяет писать «чистые» коды на любом языке программирования, входящем в состав фреймворка .NET (например, C#, J#, Script .NET, VB .NET и др.). При этом частично реализация исполняемого кода в процессе формирования страницы возложена на так называемую абстрактную программную модель Web Forms. Кроме того, при использовании IIS-авторизации в ASP.NET существенно повышается и безопасность взаимодействия сервера и клиента на основе протокола HTTP.

Применение архитектуры Membership API позволяет управлять даже данными пользователей из других источников вроде SQL Server или Active Directory. Сама же аутентификация производится либо за счет специальных форм, либо прямо через Windows IIS.

Преимущества перед ASP

В смысле превосходства над своей предшественницей эта платформа действительно имеет ряд неоспоримых преимуществ. Так, например, ускорено выполнение компилированного кода, а все ошибки исправляются еще на стадии первичной разработки, улучшена обработка ошибок в готовой программе, быстрая разработка веб-приложений стала возможной за счет использования множества выделяемых пользовательских шаблонов, библиотек классов и элементов управления, появилась возможность написания исходного кода на любом языке, поддерживающем .NET и т. д. Кроме того, отдельно можно отметить, что теперь стало возможным кэшировать страницу целиком или частично для увеличения производительности и скорости ее загрузки в браузерах, использовать master-страницы и расширяемые модели событий, элементы управления и обработки запросов, а также применять встроенную поддержку AJAX.

ASP.NET Core

Эта ветвь в разработке основной платформы, по сути своей, сохранила те же принципы, которые был заложены в ASP.NET. Что это, с точки зрения улучшений?

Только то, что Core является практически полным аналогом ASP.NET, но с открытым исходным кодом и базируется на паттерне MVC. Кроме того, сама платформа стала более унифицирована по отношению к другим приложениям, отпала необходимость жесткой привязки к System.Web.DLL и IIS, и в ней появился собственный встроенный инструментарий для обеспечения внедрения зависимостей. А вот унификация позволила оптимизировать использование метода Main и запуск веб-части приложений.

Связь между ASP.NET и Framework

Как уже было сказано выше, ASP.NET имеет достаточно строгую привязку к основному фреймворку, что впервые было замечено при выходе платформы версии 1.0. Сам фреймворк выступает в качестве своеобразного средства стандартизации обращения к вызовам. В свою очередь, исполняемая среда CLR дает возможность использовать единый набор сервисов, вне зависимости от применяемого языка программирования.

Некоторые нюансы установки

Что касается установки платформы и ускорения разработки веб-приложений на основе .NET, большинство специалистов рекомендует для начального ознакомления устанавливать ASP.NET версии 2.0. Эта модификация может использоваться практически во всех десктопных и серверных версиях Windows с сопутствующими сервис-паками, начиная с Windows 2000. Но сами готовые страницы желательно размещать исключительно на Windows Server.

Можно ли обойтись без ASP.NET?

Как считается, установка ASP.NET не является необходимой при использовании Visual Studio .NET 2005 года выпуска и выше.

В этом наборе имеется специальный компонент Visual Web Developer Express Edition, для которого достаточно наличия только основного фреймворка .NET. Системные требования выглядят весьма скромными (ЦП 600 МГц 128 Мб ОЗУ), не говоря уже о том, что на установку всех компонентов, включая документацию, потребуется порядка 1,3 Гб свободного места на диске, но в процессе инсталляции VWD самостоятельно догрузит из интернета еще около 120 Мб.

. Часть 1

Интерфейс к базе данных с помощью ASP

Постановка задачи

Предположим, перед нами стоит задача создания газетного сайта, причем некоторые из его читателей должны иметь право пополнять его новыми статьями, снабжаемыми фотографиями непосредственно с самого сайта и без программирования. Предположим также, что такой сайт должен иметь возможности удаления статей, их поиска, а также сортировки. С первого взгляда может показаться, что решение такой задачи не под силу начинающему программисту ASP, однако, как вы скоро увидите, это далеко не так.

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

Я почти уверен, что подобная задача актуальна применительно практически к любому сайту, тем более что подобным образом (разве что без возможностей поиска, сортировки и удаления) работает большинство гостевых книг (guestbook).

Что нам понадобится

Для реализации вышеизложенной задачи нам потребуется персональный компьютер с Microsoft Windows NT или Windows 2000 (можно и Workstation, и Server), установленный IIS (Internet Information Server), какой-нибудь HTML-редактор (советую использовать Macromedia Dreamweaver), Microsoft Access (версии 95, 97 или 2000) и самый обычный текстовый редактор.

Создание и подготовка базы данных

Прежде всего создадим базу данных статей, для чего:

  • запустим приложение Microsoft Access;
  • любым из известных способов создадим новую базу данных. Назовем ее «Articles»;
  • в созданной базе данных создадим таблицу с именем, например «Articles»;
  • пользуясь инструментом «Конструктор», определим поля нашей таблицы и типы принимаемых ими значений (рис. 1);
  • заполним таблицу несколькими статьями в соответствии с созданными полями (рис. 2);
  • сохраним базу данных в файле «ArticlesDB.mdb».

Далее необходимо прописать нашу базу данных в соответствующем разделе источников данных системы, для этого:

  • запустим программу-конфигуратор источников данных (Data Sources ODBC) — Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC;
  • перейдем во вкладку «System DSN» и создадим новый источник данных, нажав на «Add…»;
  • в появившемся списке драйверов выберем драйвер баз данных Microsoft Access — «Microsoft Access Driver (*.mdb)» и нажмем на «Finish»;
  • в строке «Data Source Name» зададим имя нашей базы данных, например «Articles» (это то имя, по которому мы в дальнейшем будем обращаться к ней);
  • нажмем на «Select…», выберем подготовленный нами файл «ArticlesDB.mdb» и нажмем «OK».

В результате в списке источников данных в вашей системе появится строка, представленная на рис. 3.

Оформляем главную страницу (index.asp)

С ASP работать очень просто. Для этого надо всего лишь вставить текст скрипта ASP в пару тэгов . В остальном ASP-файл ничем не отличается от HTML-файла (за исключением, пожалуй, расширения). Комментарии в HTML, как известно, вставляются в пару тэгов , в ASP же закомментировать строку можно при помощи символа ‘ (апостроф) в ее начале.

Теперь давайте разберемся. Во-первых, как вы наверняка заметили, ASP-код легко сочетается с HTML-тэгами; в этом его достоинство. Так, к примеру, строка Response.Write Link & «
» отображает на экране браузера клиента подготовленное сервером значение переменной Link и HTML-тэг
, то есть перевод строки. Особый интерес вызывает переменная rs. Для искушенных программистов сразу скажу — это указатель. Однако в ASP с целью облегчения работы начинающих указатели маскируются. Здесь не встретишь громоздких С’шных конструкций, типа «я знаю, что ты знаешь, что я знаю», или, выражаясь программистским языком, указатель на указатель… Однако сделано это так искусно, что гибкость программирования при этом не теряется, нет лишь прямой работы с указателями, а только работа с помощью специальных функций, скрывающих от программиста рутину и защищающих указатели от некорректных действий. Таким образом, выражение rs.Fields («Article»).value означает значение поля «Article» текущего значения указателя на элемент базы данных (в нашем случае статей) и содержит текст статьи, которая соответствует текущей позиции указателя на все статьи. Переход к следующему элементу базы (смещение указателя) выполняется с помощью инструкции Rs.MoveNext. В приведенном выше примере это не делается, а попросту формируется ссылка на текст статьи в виде ее названия и отображается комментарий самой первой статьи, соответствующей результату запроса. Давайте попробуем отобразить все статьи нашей базы данных на главной странице в виде HTML. И еще, обратите особое внимание на директиву:

Она по сути формирует ссылку на файл, содержащий шаблон отображения самой статьи, причем передает идентификатор статьи ему в качестве параметра. Полностью файл шаблона приведен в приложении к настоящей статье, а механизм его работы может быть кратко представлен следующим образом:

Первая строчка скрипта шаблона HTML присваивает переменной TheID значение, переданное ссылкой с использованием метода Request.QueryString. Далее открывается база данных, из которой читается статья (запись), соответствующая идентификатору, переданному из главного скрипта (index.asp).

Создаем главную страницу

Таким образом в таблицу в цикле будут добавляться ряды со ссылками на статьи и с аннотациями, пока не будут отображены все статьи из базы данных. Следует обратить внимание на переменную Cnt. По окончании цикла она будет содержать число обработанных статей (рядов таблицы).

Язык структурированных запросов — SQL

Настала пора разобраться с тем, что таится за строчками:

По сути, именно за этими двумя строчками кроется работа с нашей базой данных: первая представляет собой текстовую строку с запросом к базе данных (текстовые строки в ASP записываются в двойных кавычках); вторая — содержит директиву выполнения этого запроса с одновременным присвоением результата переменной (указателю на записи в базе данных). В рамках настоящей статьи мы не будем рассматривать SQL (Structured Query Language) во всех деталях, а остановимся лишь на тех его операторах, без понимания которых дальнейшая работа будет невозможна. Для тех, кому этого покажется недостаточным, советую посетить отобранные мною сайты с детальной документацией по SQL.

Для полноценной работы нам необходимо познакомиться с четырьмя операторами этого мощного языка, предназначенного специально для работы с базами данных.

DELETE удаляет те ряды из «Имя Таблицы», которые удовлетворяют условию, определенному в «Определении», и возвращает число удаленных рядов. Если выполнить команду DELETE без условия WHERE, то все ряды указанной таблицы будут удалены. В этом случае DELETE возвратит 0. Ключевое слово LOW_PRIORITY откладывает выполнение операции DELETE до завершения работы чтения из таблицы других клиентов.

SELECT используется для извлечения рядов (записей) из одной или более таблиц. Выражение_Select определяет столбцы таблицы, значения которых необходимо извлечь. Все ключевые поля должны быть заданы в строгой последовательности. К примеру, выражение HAVING должно следовать за любым выражением GROUP BY и до любого выражения ORDER BY.

Выражение_Select можно заменить псевдонимом (alias) с помощью ключевого слова AS. Псевдоним используется в качестве идентификатора имени столбца и может быть использован наряду с ключевыми словами ORDER BY или HAVING.

Выражение HAVING может относиться к любому столбцу или псевдониму в Выражении_Select. Оно применяется к запросу в последнюю очередь, непосредственно перед посылкой данных клиенту. SELECT . INTO OUTFILE ‘имя_файла’ заносит отобранные записи в файл. Файл создается непосредственно на сервере и не может «уже существовать» (одна из основных причин такого механизма заключается в предотвращении случайного «затирания» различных важных файлов).

INSERT используется для добавления новых записей в существующую таблицу. Допустимо две формы использования INSERT.

Первая форма — INSERT . VALUES — вставляет ряды на основании заданных значений. Вторая форма — INSERT . SELECT — вставляет ряды, выбранные из другой таблицы.

Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Ключевое слово IGNORE в команде INSERT позволяет избегать вставки повторяющихся строк (используется в сочетании с ключевыми словами PRIMARY или UNIQUE). Для второй формы INSERT INTO . SELECT операция не может содержать выражения ORDER BY. Таблица, в которую производится добавление записей, не может присутствовать в выражении FROM части SELECT запроса потому, что запрещено производить выделение из той же самой таблицы, в которую производится вставка.

REPLACE служит для редактирования содержимого таблицы и работает в точности как INSERT, за исключением того, что если старая запись в таблице имеет то же значение, что и записываемая, то старая запись удаляется прежде, чем добавляется новая.

UPDATE обновляет поля существующей таблицы новыми значениями. Выражение SET показывает, какие поля (столбцы) должны быть изменены, и значения, которые должны быть им присвоены. Выражение WHERE, если оно есть, указывает, какие ряды должны быть обновлены. В противном случае операция применяется ко всем рядам таблицы. Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Выражения UPDATE выполняются слева направо.

Обновляет значение поля Password в таблице WAPassword, записывая в поле, чей идентификатор ID равен 1 значение ‘passw’.

Увеличивает значение поля counter таблицы Счетчик на 1.

Удваивает поле age, а затем прибавляет 1 к его значению в таблице persondata.

Что такое Global.asa


Global.asa позволяет выполнять определенные скрипты в начале работы клиентской сессии или при инициализации IIS. Примером тому может служить простейший счетчик числа посещений сайта. Более того, допустимо использовать множественные файлы Global.asa. Однако следует помнить, что ASP-скрипт ищет самый близкий (расположенный в том же каталоге) файл Global.asa и использует именно его.

По сути, этот файл может содержать четыре скрипта: первый будет выполняться при инициализации службы IIS/PWS (Application_OnStart), второй — при остановке службы IIS/PWS (Application_OnEnd) (обычно эти первые два скрипта отрабатывают в процессе перезагрузки компьютера), и еще два скрипта выполняются дополнительно при инициализации сессии пользователя (Session_OnStart) и по ее окончании (Session_OnEnd). Данная схема очень сильно напоминает пары «конструктор-деструктор». Неспроста всякая переменная, которая должна быть использована (например, в текущей сессии), может быть инициализирована в Session_OnStart с тем, чтобы быть использованной в процессе работы сессии, она же уничтожается (обнуляется) в Session_OnEnd.

Global.asa не может содержать тэгов HTML. Недопустимо использование JavaScript. Не рекомендуется писать файл Global.asa с помощью каких-либо HTML-редакторов, для этого гораздо лучше использовать NotePad. И еще один совет: прежде чем вставлять скрипт в файл Global.asa, попробуйте его в работе в обычном ASP-файле.

Пример файла Global.asa

Добавляем новую статью (UploadForm.asp и Upload2DBS.asp)

Теперь, когда мы разобрались с SQL, можно приступать к добавлению новой статьи, причем делать мы это будем прямо с сайта, а если быть точнее — непосредственно с HTML-формы. Для этого сначала создадим файл с самой формой и определим скрипт-реакцию на подтверждение (кнопку «Publish the article!»). (Предполагается, что читатель знаком с азами построения HTML-форм, поэтому мы рассмотрим этот процесс, не вдаваясь в детали построения форм.)

Прежде всего следует уточнить задачу на этом этапе. Итак, очевидно следующее:

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

Как видим, передача управления осуществляется благодаря директиве ACTION=»http://localhost/Upload2DBS.asp»> в тэге формы. Тем самым указывается скрипт-ответ на реакцию пользователя после нажатия на кнопку «Publish the article!». Теперь остановимся на селекторе рубрик. Как уже отмечалось, желательно перевести его содержимое в базу данных. Для этого в нашей базе данных (файл ArticlesDB.mdb) создадим новую таблицу с именем, к примеру «Topics», в которой с помощью конструктора определим всего одно поле — «Topic» типа «текст». Далее заполним эту таблицу произвольными значениями нашего рубрикатора и отсортируем полученный список в алфавитном порядке. После чего следует заменить тэг

Теперь давайте разберемся с самой сутью дальнейшей работы. Что же должен делать наш скрипт-реакция?

Во-первых, следует позаботиться о том, чтобы все обязательные поля (а они отмечены звездочкой) были введены. Наиболее правильным способом проверки этого является скрипт, написанный на любом языке описания скриптов (например, JavaScript), который будет проверять, введены ли значения обязательных полей. Для этого достаточно добавить в определение тэга формы параметр onsubmit=»preprocess();», где preprocess() — имя функции-скрипта, который и будет осуществлять проверку. Здесь как нельзя кстати видно преимущество языков описания сценариев (JavaScript, Jscript, VBScript) перед ASP. ASP выполняется на стороне сервера, а перегружать связь «клиент-сервер» простой проверкой типа «введены ли значения», согласитесь, неправильно. Однако специально в целях обучения мы будем делать это с помощью ASP.

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

Удаляем статью (RemoveForm.asp и Rem.asp)

Было бы неплохо предусмотреть возможность удаления статьи с нашего сайта: во-первых, она может устареть, а во-вторых, в процессе ее подготовки не исключены ошибки или опечатки. Останавливаться на форме удаления статьи не будем, скажем лишь, что она содержит единственные элементы с запросом пароля и кнопкой удаления (см. файл RemoveForm.asp), и сразу перейдем к рассмотрению непосредственно процесса удаления:

Особое внимание следует уделить первым двум строкам. Они получают значение глобальной переменной текущего сеанса (сессии) работы со значением идентификатора текущей статьи (в нашем случае удаляемой), которая была инициализирована (файл ArtTmp.htm) следующей строкой:

Таким образом, в текущий скрипт передается в качестве параметра сеансовая переменная с идентификатором текущей статьи, которую необходимо удалить. Имеется в виду, что ссылка на удаление присутствует в странице с шаблоном (файл ArtTmp.htm) и удаляемая статья является текущей.

Организуем поиск (SearchForm.asp и SearchDBS.asp)

Как известно, без поиска навигация в сколь-нибудь солидной базе данных невозможна в принципе. Попробуем организовать поиск статьи по ее реквизитам, причем постараемся организовать булев (логический) поиск, соединяя отдельные значения критериев поиска с помощью логики «И/ИЛИ».

Опять же не заостряя внимание на поисковой форме (файл SearchForm.asp), перейдем непосредственно к самому процессу поиска:

Самое интересное происходит при формировании запроса к базе из составляющих:

В зависимости от введенной пользователем комбинации исходных полей из этих компонентов формируется окончательный запрос, в частности для полей «Author» и «Title». Возможны четыре случая: оба поля пусты, пусто первое поле, пусто второе поле и оба поля не пусты. Соответствующая строка SQL-запроса в каждом из этих случаев формируется по-своему. То же самое относится к состоянию селекторов рубрик статей и порядку их сортировки. При добавлении той или иной подстроки учитывается состояние «радиокнопок» И/ИЛИ и соответствующая подстрока добавляется в SQL-запрос, предваряясь логическим элементом «and» или «or» соответственно. После того как окончательный запрос сформирован, он выполняется, а результирующая страница формируется исходя из списка статей, удовлетворяющих критериям.

Полный код приведенных в статье примеров, включая файл базы данных, находится на нашем CD-ROM.

И в заключение

Напоследок хотелось бы сориентировать разработчиков ASP-страниц в мире документации и инструментальных средств. Дело в том, что автор настоящей статьи провел не один день сидя в Интернете в поисках всевозможных исходных текстов, документации, инструментальных средств и теоретических основ этого мощного средства.

Среди множества инструментальных средств, служащих для облегчения создания ASP-приложений, выделяются два: Easy ASP © Eric Banker, 2000 и Microsoft InterDev из комплекта Microsoft Visual Studio 6.0. Первый — очень удобное, несложное и небольшое средство для быстрого создания ASP-приложений. Второй представляет собой мощный, тяжеловесный интегрированный пакет в духе Microsoft для разработки всевозможных Web-приложений.

Временная версия EasyASP 4.0 находится на нашем CD-ROM.

Среди огромного числа сайтов мною были отобраны те, посещение которых было для меня особенно полезным и с которыми хотелось ознакомить читателей, а именно:

http://www.15seconds.com/issue/000210.htm — создание динамичных JavaScript-скриптов с помощью ASP и интерфейсов к базам данных

http://www.alphasierrapapa.com/iisdev/ — сайт, посвященный разработке серверов IIS с помощью ASP

http://www.websiteresources.com/ — огромная база исходных текстов всевозможных Web-программ

Примеры ASP-кода для профессионалов

http://www.asptoday.com/search.asp?category=ASP Tricks — масса полезных советов для начинающих программировать на ASP

http://www.oreilly.com/catalog/aspnut/ — замечательная книга популярнейшей серии «In a Nutshell» всемирно известного издательства O’REILLY «ASP in a Nutshell A Desktop Quick Reference». На сайте бесплатно размещена одна из глав книги

http://www.chilisoft.net/ — версии ASP для различных платформ можно скачать с этого сайта

http://www.willcam.com/sql/ — введение в структурированный язык запросов SQL

SQL Reference and Example Site — хорошо структурированный материал по SQL

ASP.Net. Лекция 3. Серверные элементы управления (исходники, документация)

Одной из самых важных веб-задач разработчика является получение и обработка данных, введенных пользователем. Информация посылается серверу через форму . Форма содержит элементы управления, которые позволяют вводить информацию различными способами.

Формы применяются в большинстве сайтов. Например, если вы пишете письмо в веб-интерфейсе, появляется форма с текстовыми полями, соответствующими адресату, теме, и тексту письма. Нажатием на кнопку можно добавить прилагаемый файл и окончательно послать письмо кнопкой Send.

Форма HTML содержит теги, такие как текстовое поле, выпадающий список, переключатели (radiobuttons) и флажки (checkbox), кнопки.

Форма ASP.NET отличаются от обычных форм наличием свойства runat=»server». Они обрабатываются ASP.NET на сервере. Формы являются одним из полей страницы. На странице находятся элементы управления . Многие из них должны быть расположены внутри формы. ASP.NET позволяет запоминать состояние элементов управления, то есть текст, который был введен в текстовое поле, или выбранный переключатель, передавать его на сервер и обратно на страницу после ее обновления.

Все формы обрабатываются методом POST. Атрибут Action можно задавать, но не обязательно. По умолчанию это текущая страница.

У элементов управления ASP.NET. тоже имеется свойство runat=»server». Второй обязательный атрибут — это его идентификатор, или id. Он нужен, чтобы обращаться к элементу в программе, то есть это имя члена страницы, по которому мы можем его идентифицировать. Примеры мы уже видели в предыдущих лекциях.

Перечислим группы элементов управления.

Элементы управления HTML

Элементы управления HTML являются наследниками класса System.Web.UI.HtmlControls.HtmlControl. Они непосредственно отображаются в виде элементов разметки HTML. Их отображение не зависит от типа браузера. Свойства таких элементов полностью соответствуют атрибутам тегов HTML.

Сравните обычный тег

с элементом управления HTML

Разница заключается только в наличии атрибута =»server». Но он дает колоссальную разницу. Теги сервер отображает как есть, а элементом управления можно манипулировать в коде. Так можно написать в функции-методе страницы только во втором случае.

что равносильно this.Reset1.Value = «АСП»;

Следовательно, Reset1 становится одним из членов класса страницы.

Их можно использовать, если необходимо получить определенные теги HTML, или если нужно конвертировать старые страницы asp. Элементы управления HTML можно размещать на одной странице вперемешку с серверными элементами.

Стандартные или серверные элементы управления

Серверные элементы мощнее, потому что они привязаны не к разметке, а к функциональности, которую нужно обеспечить. Многие элементы не имеют аналогов в HTML, например, календарь. Их отрисовка полностью контролируется ASP.NET. Перехватывая события PreRender, Init, Load, можно вмешаться в этот процесс. Объявления серверного элемента управления начинаются с блока и заканчиваются

Возможно также закрыть объявление тегом />, если внутри блока нет текста.

Свойства этих элементов строго типизированы в отличие от HTML-элементов.

В этой таблице приведены элементы управления, которые имеют пару среди тегов HTML. Вообще их гораздо больше. Некоторые элементы генерируют не только HTML-код, но и JavaScript. В ASP .NET 2.0 было добавлено множество новых сложных элементов управления, например, MultiView, TreeView, Wizard, GridView. Возможностей одного GridView хватит, чтобы написать целую статью.

Таблица соответствия некоторых серверных элементов управления web тегам HTML
Элемент управления ASP..NET Соответствующий тег HTML Назначение
Отобразить текст
, между которыми находятся один или несколько тегов .

DropDownList выдаст тот же самый код, если будет определен так:

Итак, если мы хотим перейти с написания страниц HTML к написанию кода asp:

Отличие серверных элементов управления в том, что их можно программировать на сервере, и получать информацию от них тоже на сервере.

Попробуем написать такую страницу:

Запустите ее на выполнение, выберите Компакт-диски и нажмите на кнопку. На форме появится надпись «Вы выбрали Компакт-диски».

Вот код этой страницы в браузере:

Итак, браузеру посылается простая страница, на которой нет скриптов. То же поведение можно было бы запрограммировать с помощью JavaScript. Разница в том, что пользователь смог бы увидеть бы увидеть код на JavaScript, скопировать и использовать его на своих страницах. В этом нет ничего плохого, но иногда люди хотят сохранить свой код в тайне в целях защиты интеллектуальной собственности.

Посмотрим, как ASP .NET интерпретировал заголовок формы:

Событие SelectedIndexChanged имеется и тут, как и у всех классов-наследников от абстрактного класса ListControl.

Panel

Часто бывает нужно вставить элемент управления в точно определенное место страницы. Например, объединим два предыдущих примера.

Эта страница работает не так, как нам хотелось. Текст оказался после выпадающего списка, хотя логичней было бы, чтобы текст шел в начале. В Javascript для этого используют элемент разметки

Чтобы заставить метку отображаться перед списком, необходимо поместить перед DropDownList обьект Panel.


после чего вызывать метод Controls.Add(. ) от этого оьекта.

Свойство HorizontalAlign элемента Panel полезно, если нужно установить выравнивание содержащихся в нем элементов управления. Поменяем код в предыдущем примере:

Текст теперь размещается в центре метки.

Булевское свойство Wrap элемента Panel заставляет переносить текст на новую строку, есть установлено, или расширять раздел, если текст не помещается в одну строку, если не установлено.

Если в программе установить свойство Visible панели в False, можно сделать невидимыми все элементы, которые в нем находятся. Стили, установленные в панели, наследуются всеми вложенными элементами.

Новая возможность в ASP.NET 2.0 — задавать для Panel полосы прокрутки, как бы имитируя встроенное в страницу окно. Это делается с помощью свойства ScrollBars. Он может принимать следующие значения: None, Both, Vertical, Horizontal, Auto. Если вы установите его в Auto, полосы прокрутки появятся, если содержимое панели не умещается в его видимые размеры.

Реализуется такая возможность с помощью атрибута css overflow.

Ставить свойство ScrollBars в Vertical или Horizontal я вам не рекомендую. этом случае генерируется стиль overflow-x, а это не работает в браузере Opera 9.0. Стиль overflow не поддерживается Opera 6.

Вертикальную полосу прокрутки можно установить и слева. Для этого поменяйте свойство Direction в RightToLeft.

Для Panel можно задать фоновую картинку с помощью свойства BackImageUrl.

Заключение

Серверные элементы управления предоставляют в распоряжение программиста свойства, методы и события. При их помощи мы можем абстрагироваться от деталей HTML кода и работать со страницей и ее элементами как с объектами. Мы рассмотрели часть серверных элементов управления. С новыми интересными элементами управления познакомимся в следующей лекции.

Типы возвращаемых значений действий контроллера в веб-API ASP.NET Core Controller action return types in ASP.NET Core web API

ASP.NET Core предоставляет следующие параметры для типов возвращаемых значений действий контроллера веб-API: ASP.NET Core offers the following options for web API controller action return types:

В этом документе объясняется, когда лучше использовать каждый тип возвращаемого значения. This document explains when it’s most appropriate to use each return type.

Определенный тип Specific type

Простейшее действие возвращает элементарный или сложный тип данных (например, string или пользовательский тип объекта). The simplest action returns a primitive or complex data type (for example, string or a custom object type). Рассмотрим следующее действие, которое возвращает коллекцию пользовательских объектов Product : Consider the following action, which returns a collection of custom Product objects:

Если не известны условия, которые необходимо соблюдать при выполнении действия, конкретного типа будет достаточно. Without known conditions to safeguard against during action execution, returning a specific type could suffice. Предыдущее действие не принимает параметры, поэтому проверка ограничений параметров не требуется. The preceding action accepts no parameters, so parameter constraints validation isn’t needed.

Если в действии необходимо учитывать известные условия, используется несколько путей возврата. When known conditions need to be accounted for in an action, multiple return paths are introduced. В этом случае рекомендуется комбинировать тип возвращаемого значения класса ActionResult с примитивным или сложным типом возвращаемого значения. In such a case, it’s common to mix an ActionResult return type with the primitive or complex return type. Для этого типа действия требуется IActionResult или ActionResult . Either IActionResult or ActionResult are necessary to accommodate this type of action.

Получение IEnumerable или IAsyncEnumerable Return IEnumerable or IAsyncEnumerable

В ASP.NET Core 2.2 и более ранних версиях получение интерфейса IAsyncEnumerable из действия приводит к тому, что сериализатор выполняет синхронную итерацию операции сбора. In ASP.NET Core 2.2 and earlier, returning IAsyncEnumerable from an action results in synchronous collection iteration by the serializer. В результате вызовы блокируются, что может стать причиной перегрузки пула потоков. The result is the blocking of calls and a potential for thread pool starvation. Представьте, что Entity Framework (EF) Core используется веб-API для доступа к данным. To illustrate, imagine that Entity Framework (EF) Core is being used for the web API’s data access needs. Во время сериализации выполняется синхронное перечисление для типа возвращаемого значения следующего действия: The following action’s return type is synchronously enumerated during serialization:

Чтобы не допустить синхронного перечисления и блокировки операций ожидания для базы данных в ASP.NET Core 2.2 и более ранних версий, вызовите ToListAsync : To avoid synchronous enumeration and blocking waits on the database in ASP.NET Core 2.2 and earlier, invoke ToListAsync :

В ASP.NET Core 3.0 и более поздних версиях получение IAsyncEnumerable из действия: In ASP.NET Core 3.0 and later, returning IAsyncEnumerable from an action:

  • больше не приводит к синхронной итерации; No longer results in synchronous iteration.
  • по эффективности не отличается от получения IEnumerable . Becomes as efficient as returning IEnumerable .

ASP.NET Core 3.0 и более поздних версий помещает результаты следующего действия в буфер перед предоставлением его сериализатору: ASP.NET Core 3.0 and later buffers the result of the following action before providing it to the serializer:

Мы рекомендуем объявлять тип возвращаемого значения для сигнатуры действия как IAsyncEnumerable для гарантированного выполнения асинхронной итерации. Consider declaring the action signature’s return type as IAsyncEnumerable to guarantee the asynchronous iteration. То есть режим итерации зависит от возвращаемого базового конкретного типа. Ultimately, the iteration mode is based on the underlying concrete type being returned. MVC автоматически буферизует все конкретные типы, которые реализуют IAsyncEnumerable . MVC automatically buffers any concrete type that implements IAsyncEnumerable .

Рассмотрим следующее действие, которое возвращает записи о продуктах со сниженной ценой как IEnumerable

: Consider the following action, which returns sale-priced product records as IEnumerable

для предшествующего действия является: The IAsyncEnumerable

equivalent of the preceding action is:

Начиная с версии ASP.NET Core 3.0, оба предшествующих действия не являются блокирующими. Both of the preceding actions are non-blocking as of ASP.NET Core 3.0.

Тип IActionResult IActionResult type

Тип возвращаемого значения IActionResult можно использовать, если в действии допускаются несколько типов возвращаемого значения ActionResult . The IActionResult return type is appropriate when multiple ActionResult return types are possible in an action. Типы ActionResult представляют различные коды состояния HTTP. The ActionResult types represent various HTTP status codes. Любой неабстрактный класс, унаследованный от квалификаторов ActionResult в виде допустимого типа возвращаемого значения. Any non-abstract class deriving from ActionResult qualifies as a valid return type. Некоторые распространенные типы возвращаемых значений в этой категории: BadRequestResult (400), NotFoundResult (404) и OkObjectResult (200). Some common return types in this category are BadRequestResult (400), NotFoundResult (404), and OkObjectResult (200). Кроме того, удобные методы в классе ControllerBase можно использовать для получения типов ActionResult из действия. Alternatively, convenience methods in the ControllerBase class can be used to return ActionResult types from an action. Например, return BadRequest(); — это сокращенная форма return new BadRequestResult(); . For example, return BadRequest(); is a shorthand form of return new BadRequestResult(); .

Так как в типе действия есть несколько типов возвращаемого значения и путей, необходимо использовать атрибут [ProducesResponseType]. Because there are multiple return types and paths in this type of action, liberal use of the [ProducesResponseType] attribute is necessary. Этот атрибут создает описательные сведения об ответе для страниц справки по веб-API, создаваемых с помощью таких инструментов, как Swagger. This attribute produces more descriptive response details for web API help pages generated by tools like Swagger. [ProducesResponseType] указывает известные типы и коды состояния HTTP, возвращаемые действием. [ProducesResponseType] indicates the known types and HTTP status codes to be returned by the action.

Синхронное действие Synchronous action

Рассмотрим следующее синхронное действие, в котором возможны два типа возвращаемых значений: Consider the following synchronous action in which there are two possible return types:

В предшествующем действии: In the preceding action:

  • возвращается код состояния 404, если продукт, представленный id , не существует в базовом хранилище данных; A 404 status code is returned when the product represented by id doesn’t exist in the underlying data store. вызывается удобный метод NotFound в качестве сокращения return new NotFoundResult(); . The NotFound convenience method is invoked as shorthand for return new NotFoundResult(); .
  • Код состояния 200 возвращается с объектом Product , если продукт не существует. A 200 status code is returned with the Product object when the product does exist. Удобный метод Ok вызывается как сокращение для return new OkObjectResult(product); . The Ok convenience method is invoked as shorthand for return new OkObjectResult(product); .

Асинхронное действие Asynchronous action

Рассмотрим следующее асинхронное действие, в котором возможны два типа возвращаемых значений: Consider the following asynchronous action in which there are two possible return types:

В предшествующем действии: In the preceding action:

  • Код состояния 400 возвращается, если описание продукта содержит строку XYZ Widget. A 400 status code is returned when the product description contains «XYZ Widget». Удобный метод BadRequest вызывается как сокращение для return new BadRequestResult(); . The BadRequest convenience method is invoked as shorthand for return new BadRequestResult(); .
  • Код состояния 201 генерируется удобным методом CreatedAtAction при создании продукта. A 201 status code is generated by the CreatedAtAction convenience method when a product is created. В качестве альтернативы вызову CreatedAtAction можно использовать return new CreatedAtActionResult(nameof(GetBy >. An alternative to calling CreatedAtAction is return new CreatedAtActionResult(nameof(GetBy >. В этом пути к коду объект Product предоставляется в тексте ответа. In this code path, the Product object is provided in the response body. Также предоставляется заголовок ответа Location с URL-адресом только что созданного продукта. A Location response header containing the newly created product’s URL is provided.

Например, следующая модель указывает на то, что запросы должны включать свойства Name и Description . For example, the following model indicates that requests must include the Name and Description properties. Если Name и Description не были указаны в запросе, происходит сбой проверки модели. Failure to provide Name and Description in the request causes model validation to fail.

Если атрибут [ApiController] применяется в ASP.NET Core 2.1 и более поздних версиях, ошибки при проверке модели приводят к коду состояния 400. If the [ApiController] attribute in ASP.NET Core 2.1 or later is applied, model validation errors result in a 400 status code. Дополнительные сведения см. в разделе Автоматические отклики HTTP 400. For more information, see Automatic HTTP 400 responses.

Тип ActionResult ActionResult type

ASP.NET Core 2.1 предоставляет тип возвращаемого значения ActionResult для действий контроллера веб-API. ASP.NET Core 2.1 introduced the ActionResult return type for web API controller actions. Он позволяет возвращать тип, производный от ActionResult или определенный тип. It enables you to return a type deriving from ActionResult or return a specific type. ActionResult имеет следующие преимущества по сравнению с типом IActionResult: ActionResult offers the following benefits over the IActionResult type:

  • Свойство Type атрибута [ProducesResponseType] можно исключить. The [ProducesResponseType] attribute’s Type property can be excluded. Например, [ProducesResponseType(200, Type = typeof(Product))] упрощается до [ProducesResponseType(200)] . For example, [ProducesResponseType(200, Type = typeof(Product))] is simplified to [ProducesResponseType(200)] . Ожидаемый тип возвращаемого значения действия вместо этого выводится из T в ActionResult . The action’s expected return type is instead inferred from the T in ActionResult .
  • Операторы неявного приведения поддерживают преобразование T и ActionResult в ActionResult . Implicit cast operators support the conversion of both T and ActionResult to ActionResult . T преобразуется в ObjectResult, то есть return new ObjectResult(T); упрощается до return T; . T converts to ObjectResult, which means return new ObjectResult(T); is simplified to return T; .

C# не поддерживает операторы неявных приведений в интерфейсах. C# doesn’t support implicit cast operators on interfaces. Следовательно, для преобразования в конкретный тип необходимо использовать ActionResult . Consequently, conversion of the interface to a concrete type is necessary to use ActionResult . Например, использование IEnumerable не работает в следующем примере: For example, use of IEnumerable in the following example doesn’t work:

Один из способов исправить приведенный выше код — возвратить _repository.GetProducts().ToList(); . One option to fix the preceding code is to return _repository.GetProducts().ToList(); .

Большинство действий имеют тип возвращаемого значения. Most actions have a specific return type. При выполнении действия могут возникнуть непредвиденные условия, и в этом случае определенный тип не возвращается. Unexpected conditions can occur during action execution, in which case the specific type isn’t returned. Например, входной параметр действия может не пройти проверку модели. For example, an action’s input parameter may fail model validation. В этом случае обычно возвращается подходящий тип ActionResult вместо конкретного типа. In such a case, it’s common to return the appropriate ActionResult type instead of the specific type.

Синхронное действие Synchronous action

Рассмотрим синхронное действие, в котором возможны два типа возвращаемых значений: Consider a synchronous action in which there are two possible return types:

В предшествующем действии: In the preceding action:

  • возвращается код состояния 404, если продукт не существует в базе данных; A 404 status code is returned when the product doesn’t exist in the database.
  • возвращается код состояния 200 с соответствующим объектом Product , если продукт существует. A 200 status code is returned with the corresponding Product object when the product does exist. До версии ASP.NET Core 2.1 строка return product; имела бы вид return Ok(product); . Before ASP.NET Core 2.1, the return product; line had to be return Ok(product); .

Асинхронное действие Asynchronous action

Рассмотрим асинхронное действие, в котором возможны два типа возвращаемых значений: Consider an asynchronous action in which there are two possible return types:

В предшествующем действии: In the preceding action:

Что такое код asp notdeletable

Скажи мне от чего ты готов отказаться, и я скажу тебе, чего ты можешь достичь.

( Евгений Кащеев )

Создание сайта :
— сегодня уже не роскошь, а необходимый инструмент для эффективной рекламы и продвижения своего товара, продукции, компании.
Созданный сайт, прежде всего, должен обладать профессиональным, стильным web дизайном и клиент всегда должен иметь возможность легко найти необходимую для него услугу или товар.
Мы занимаемся: (разработка сайта, создание сайтов, редизайн сайтов, предоставление хостинга, продвижение сайтов, оптимизация под поисковые системы, создание индивидуального стиля компании, графика, Flash, шаблоны сайтов)
Читать далее

Полезные вещички
HTML (учебник)
Web (веб) статьи
Раскрутка
Web-мастеру
Программы
Рассылка
Главная Студия Услуги НАШИ РАБОТЫ Цены Заказ Контакты Полезное
| Доменное имя | Разное php | Тонкости web | Выбираем хостинг | Библиотека |
Что такое ASP?

Что такое ASP?
Относительно недавно на смену статическим веб-страницам стали приходить динамические — то есть страницы, содержимое которых формируется в зависимости от действия пользователя. Соответственно, потребовался и новый класс приложений, способных формировать такие страницы. Эти приложения получили название серверов веб-приложений.
В начале 1997 года компания Microsoft выпустила 3-ю версию своего веб-сервера (Internet Information Server или IIS), в котором был реализован принципиально новый метод написания серверных приложений. Он получил название ASP (Active Server Pages — активные серверные страницы). Метод является функциональным расширением веб-сервера Microsoft и основан на использовании программных интерфейсов сервера.

По сути ASP — это обычные текстовые файлы (обычно с расширением имени asp), содержащие конструкции языка HTML и сценарии, написанные на языках JScript и/или VBScript, выполняющиеся на сервере наряду с обычным HTML-кодом.

Чем же хороша технология ASP? Прежде всего, возможностью исполнять сценарии на сервере. С помощью сценариев для сервера можно получить доступ к файлам, базам данных и другим ресурсам, хранимым на сервере, а также к централизованным ресурсам сервера, таким как электронная почта или факс-служба.

Функционирование в непротиворечивой и управляемой среде — еще одно преимущество выполнения сценариев на сервере. Ваш код выполняется только на одной версии единственного сервера, а не на множестве версий множества браузеров. Тем самым достигается так называемая кросс-платформенная совместимость.

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

Новый год детям
Создание сайта. Участие в благотворительном фонде помощь детям.

Илон Маск рекомендует:  Строки таблицы
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL