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


Содержание

Как в аспе получить значение input-a?

08.11.2009, 08:43

Можно ли на аспе каким нить боком к линку прикрутить значение textarea?
Можно ли на аспе каким нить боком к линку прикрутить значение textarea? Если можно, то как?

?
Как получить в Clipboard выделенную часть текста в или в

Как получить значение input-ов
например у меня есть несколько input-ов с атрибутом и несколько input-ов с атрибутом.

Класс Page

Теперь, когда вы увидели, что собой представляет жизненный цикл страницы, и узнали, каким образом в странице содержатся элементы управления, не помешает указать, что экземпляр самой страницы тоже создается в виде объекта элемента управления. В действительности все веб-формы фактически являются экземплярами класса Page из ASP.NET, который находится в пространстве имен System.Web.UI.

Вы наверняка уже догадались об этом, заметив, что каждый класс отделенного кода явно наследуется от System.Web.UI.Page. Это означает, что каждая создаваемая веб-форма сразу же получает огромный объем функциональности, такой как уже встречавшийся ранее метод FindControl() и свойство IsPostBack. Помимо этого, наследование от Page также еще предоставляет коду доступ к следующим чрезвычайно полезным свойствам:

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

Более подробно об этих объектах рассказывается в последующих разделах.

Объекты Session, Application и Cache

Объект Session является экземпляром класса System.Web.SessionState.HttpSessionState. Он предназначен для хранения любого типа пользовательских данных, который должен постоянно существовать между запросами веб-страниц. Объект Session предоставляет словарный доступ к набору пар «имя-значение», представляющему пользовательские данные для этого сеанса. Состояние сеанса часто применяется для обслуживания информации наподобие имени и идентификатора пользователя, покупательской тележки либо других элементов, удаляемых, когда пользователь уже не посещает страницы веб-сайта.

Объект Application является экземпляром класса System.Web.HttpApplicationState. Подобно объекту Session, он тоже представляет собой словарь данных типа «имя-значение». Однако эти данные являются глобальными для всего приложения.

Что касается объекта Cache, то он является экземпляром класса System.Web.Caching.Cache. В нем также хранится глобальная информация, но он предлагает более масштабируемый механизм хранения, поскольку ASP.NET может удалять объекты в случае нехватки памяти сервера. Как и другие наборы состояний, это, по сути, коллекция объектов «имя-значение», однако здесь для каждого элемента можно также устанавливать специализированные политики истечения срока и определять зависимости.

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

Объект Request

Объект Request является экземпляром класса System.Web.HttpRequest. Этот объект представляет значения и свойства HTTP-запроса, который привел к загрузке страницы. В нем содержатся все параметры, касающиеся URL, а также все остальные данные, которые были отправлены клиентом. Большая часть из предоставляемой объектом Request информации заключена в оболочку абстракций более высокого уровня (например, в оболочку модели веб-элементов управления ASP.NET), поэтому она даже и близко не так важна, как это было в классической ASP-разработке.

Тем не менее, объект Request все равно может использоваться, например, для выяснения того, каким браузером пользуется клиент, или же для создания cookie-наборов и последующего изучения их содержимого.

В таблице ниже перечислены некоторые наиболее часто применяемые свойства объекта Request:

Свойства объекта HttpRequest

Свойство Описание
AnonymousID Уникальным образом идентифицирует текущего пользователя, если был включен анонимный доступ.
ApplicationPath и PhysicalApplicationPath ApplicationPath извлекает информацию о месте размещения виртуального каталога приложения ASP.NET (URL-адрес), a PhysicalPath — о месте размещения его «реального»каталога
Browser Предоставляет ссылку на объект HttpBrowserCapabilities, в котором содержатся свойства, описывающие различные функциональные возможности браузера, наподобие наличия в нем поддержки для элементов управления ActiveX, cookie-наборов, сценариев VBScript и фреймов
ClientCertificate Объект HttpClientCertificate, предоставляющий сертификат безопасности для текущего запроса, если таковой существует
Cookies Предоставляет коллекцию cookie-наборов, отправляемых с этим запросом
FilePath и CurrentExecutionFilePath Возвращают реальный путь к файлу (относительно сервера) для выполняемой в данный момент страницы. FilePath представляет страницу, запустившую процесс выполнения. Это то же самое, что и CurrentExecutionFilePath, если вы не переместили пользователя на новую страницу без перенаправления (например, с помощью метода Server.Transfer()), в случае чего CurrentExecutionFilePath отражает новую страницу, a FilePath определяет исходную страницу
Form Представляет коллекцию переменных формы, обратно отправляемых странице. В большинстве случаев вместо использования данной коллекции вы будете извлекать эту информацию из свойств элемента управления
Headers и ServerVariables Предоставляют словарную коллекцию HTTP-заголовков и серверных переменных с индексацией по имени. Эти коллекции по большей части состоят из низкоуровневой информации, которая отправлялась браузером вместе с веб-запросом (например, информации о типе браузера, поддерживаемых им функциональных возможностях, установленных языковых параметрах, удостоверениях, используемых для аутентификации данных, и т.д.). Обычно эту информацию гораздо легче получить из других свойств объекта HttpRequest или высокоуровневых классов ASP.NET
IsAuthenticated и IsSecureConnection Возвращают true в случае успешной аутентификации пользователя и подключения пользователя по протоколу защищенных сокетов (Secure Sockets Layer — SSL)
IsLocal Возвращает true, если пользователь запрашивает страницу с локального компьютера
QueryString Предоставляет параметры, переданные в строке запроса
Url и UrlReferrer Выдают объект Uri, представляющий текущий адрес страницы и страницу, с которой переходит пользователь (предыдущую страницу, содержащую ссылку на данную страницу)
UserAgent Строка, представляющая тип браузера. Internet Explorer предоставляет для этого свойства значение MSIE. ASP.NET использует эту информацию для выяснения того, о браузере какого типа идет речь, и, следовательно, для определения, какие функциональные возможности этот браузер должен поддерживать (такие как cookie-наборы, сценарии JavaScript и т.д.). Это, в свою очередь, может влиять на способ визуализации веб-элементов управления.
UserHostAddress и UserHostName Извлекают информацию об IP-адресе и DNS-имени удаленного клиента. К этой информации также можно получать доступ и через коллекцию ServerVariables. Однако из-за трансляции сетевых адресов (Network Address Translation — NAT) она не всегда бывает значимой. В зависимости от способа подключения к Интернету, многие клиенты могут использовать совместно один и тот же IP-адрес (например, IP-адрес шлюзового компьютера). Помимо этого, IP-адрес также еще может и меняться после выполнения нескольких запросов
UserLanguages Предоставляет отсортированный строковый массив, в котором перечислены языковые предпочтения клиента. Может быть полезно при создании многоязычных страниц

Объект Response

Объект Response является экземпляром класса System.Web.HttpResponse и представляет ответ веб-сервера на запрос клиента. При классической ASP-разработке объект Response был единственным способом программной отправки HTML-текста клиенту.

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

В следующей таблице перечислены некоторые наиболее часто применяемые члены класса HttpResponse:

Члены класса HttpResponse

Метод или свойство Описание
BufferOutput Когда это свойство установлено в true (значение по умолчанию), страница не отправляется клиенту до тех пор, пока не будет визуализирована и готова к отправке полностью, вместо того, чтобы отправляться по частям. В некоторых специфических сценариях имеет смысл устанавливать это свойство в false.
Наиболее очевидным примером является ситуация, когда клиент загружает большой файл. Если свойство BufferOutput установлено в false, клиент увидит диалоговое окно Save (Сохранить) и сможет выбрать имя файла, прежде чем этот файл будет загружен полностью
Cache Это свойство ссылается на объект HttpCachePolicy, который позволяет конфигурировать кэширование вывода
Cookies Это свойство предоставляет доступ к коллекции cookie-наборов, отправляемых вместе с ответом. Его можно использовать для добавления дополнительных cookie-наборов
Expires и ExpiresAbsolute Эти свойства можно использовать при кэшировании визуализируемого HTML-кода страницы, улучшающем показатели производительности при последующих запросах
IsClientConnected Это булевское значение, показывающее, подключен ли клиент к серверу. Если он уже не подключен, может потребоваться остановить какую-нибудь длинную операцию
Redirect() Этот метод заставляет браузер запросить другой URL-адрес, который указывает на новую страницу веб-приложения или на другой веб-сайт
RedirectPermanent() Этот метод перенаправляет браузер на новый URL-адрес, во многом подобно методу Redirect(). Разница в том, что он использует код состояния HTTP 301 (который указывает на то, что страница была перемещена навсегда), а не 302 (который указывает на то, что страница была перемещена временно)
RedirectToRoute() и RedirectToRoutePermanent() Эти методы похожи на методы Redirect() и RedirectPermanent(). Единственное отличие в том, что они используют маршрут (зарегистрированный шаблон URL, который не отображается непосредственно на страницу)
Transfer() Этот метод сообщает ASP.NET прекратить обработку текущей страницы и перейти к новой (указанной) странице с веб-формой. При этом не требуются полный цикл отправки и уведомление браузера и пользователя веб-приложения
TransferRequest() Этот метод похож на Transfer(), но позволяет переносить пользователя на страницу другого типа. Например, его можно применять для отправки пользователя с веб-формы ASP.NET на HTML-страницу.
Когда он используется, в действие приводится весь конвейер IIS для обработки нового ресурса, вместе со всеми соответствующими модулями HTTP. Но с методом TransferRequest() связан ряд существенных ограничений. Для его применения должен использоваться веб-сервер IIS 7 в интегрированном режиме. Кроме того, понадобится освободить состояние сеанса (если оно было получено) для предотвращения длительных задержек
ContentType Это свойство представляет заголовок, указывающий браузеру, содержимое какого типа он должен получить. Обычно в веб-формах ASP.NET, как и во всех веб-страницах, используется содержимое типа text/html (текст вперемешку с HTML). Однако в принципе может быть создан специальный обработчик HTTP, обслуживающий содержимое других типов
OutputStream Это свойство представляет данные, отправляемые браузеру в виде потока низкоуровневых байтов. Его можно использовать для подключения к модели потоков .NET
Write() Этот метод позволяет записывать текст прямо в поток ответа. Обычно вместо него лучше применять модель элементов управления и позволять элементам управления генерировать собственную HTML-разметку. При попытке использовать метод Response.Write() вместе с моделью элементов управления разработчик лишается возможности решать, где именно на странице должен размещаться текст.
Однако метод Response.Write() важен в ситуациях, когда элементы управления, генерирующие собственное HTML-представление, должны быть построены с нуля
BinaryWrite() и WriteFile() Эти методы позволяют брать двоичное содержимое из массива байтов или файла и записывать его прямо в поток ответа. Использовать их вместе с серверными элементами управления не имеет смысла, но они могут быть очень полезны при создании специального обработчика HTTP.
Например, можно создать HTTP-обработчик, считывающий данные для PDF-документа из записи в базе данных и записывающий их непосредственно в поток ответа с помощью метода BinaryWrite(). На стороне клиента конечный результат будет выглядеть точно так же, как и если бы пользователь загружал статический PDF-файл. При выполнении записи отличного от HTML содержимого не забывайте установить соответствующее значение для свойства ContentType

Перемещение между страницами

Самой важной функцией класса HttpResponse является предоставление небольшого набора методов, которые позволяют переходить с одной страницы на другую. Наиболее универсальным из них является метод Redirect(), который позволяет перенаправлять пользователя на другую страницу. Ниже приведен пример его применения:

Метод Redirect() требует полного цикла отправки. По сути, он отправляет браузеру сообщение, которое заставляет его запросить новую страницу.

Метод Redirect() имеет перегруженную версию, которая принимает во втором параметре булевское значение. Это значение указывает, должен ли код страницы продолжить выполнение. По умолчанию, несмотря на то, что Redirect() перенаправляет пользователя и закрывает соединение, любой оставшийся код в методе по-прежнему будет выполняться вместе с остальными событиями страницы. Это позволяет при необходимости провести очистку. Но если во втором параметре передается значение true, ASP.NET немедленно прекратит обработку страницы, что потенциально сокращает рабочую нагрузку веб-сервера.

Если нужно переместить пользователя на другую веб-форму внутри того же самого веб-приложения, можно воспользоваться более быстрым подходом с помощью метода Server.Transfer(). Однако этот метод обладает некоторыми особенностями. Из-за того, что перенаправление происходит на стороне сервера, в окне клиентского веб-браузера остается исходный URL-адрес. По сути, у браузера нет никакой возможности узнать, что в действительности он отображает уже другую страницу. Это ограничение приводит к возникновению проблем, когда клиент обновляет страницу или устанавливает на ней закладку.

Кроме того, метод Server.Transfer() не умеет передавать управление отличной от ASP.NET странице или веб-странице, находящейся в другом веб-приложении или на другом веб-сайте.

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

В ASP.NET 4 в классе HttpResponse появился еще один метод для перенаправления пользователя — RedirectPermanent() . Этот метод делает то же самое, что и Redirect(), т.е. отправляет браузеру сообщение о перенаправлении, указывающее на необходимость запроса новой страницы. Однако вместо кода состояния HTTP 302 (временное перенаправление) он использует код 301 (который обозначает постоянное перенаправление). Для веб-браузеров это отличие роли не играет, но для поисковых систем оно является очень важным. Когда поисковый робот исследует веб-сайт и получает код состояния 301, он обновляет каталог своей поисковой системы, занося в него информацию о новом URL-адресе.

Это значит, что методы Redirect() и RedirectPermanent() должны использоваться очень разными способами. Метод Redirect() необходимо применять для обеспечения обычной навигации и управления потоком выполнения в приложении (например, при прохождении пользователем какого-то процесса проверки), а метод RedirectPermanent() — при запросе старого URL-адреса, который поддерживался ранее, но больше не используется.

Обычно метод Redirect() будет вызываться где-то в коде веб-формы, в то время как метод RedirectPermanent() — в коде приложения, а точнее в методе Application_BeginRequest() внутри файла global.asax. Это позволит управлять всеми постоянными перенаправлениями в одном месте, не сохраняя заглушки для старых страниц. Ниже приведен пример:

Объект Server

Объект Server является экземпляром класса System.Web.HttpServerUtility и предоставляет разнообразные вспомогательные методы и свойства, которые перечислены в таблице:

Члены класса HttpServerUtility

Метод или свойство Описание
MachineName Свойство, представляющее имя компьютера, на котором запускается страница. Это имя веб-сервера, используемого компьютером с целью его идентификации для остальной части сети
GetLastError() Извлекает объект исключения для самой поздней ошибки (или ссылку null, если таковая не существует). Эта ошибка должна была произойти во время обработки текущего запроса и не была обработана. Чаще всего используется в обработчике событий приложения, проверяющем сбойные ситуации
HtmlEncode() и HtmlDecode() Заменяет обычную строку строкой допустимых символов HTML (и наоборот)
UrlEncode() и UrlDecode() Заменяет обычную строку строкой допустимых символов URL (и наоборот)
MapPath() Возвращает физический путь к файлу, соответствующий определенному виртуальному пути к файлу на веб-сервере. Вызов MapPath() с указанием / возвращает физический путь к корневому каталогу веб-приложения. Также поддерживает пути, содержащие символ тильды (

), который представляет корневой каталог веб-сайта (например,

/homepage.aspx)

Transfer() Передает выполнение другой веб-странице в текущем приложении. Этот метод похож на Response.Redirect(), но работает быстрее. Не может применяться для перемещения пользователя на сайт, расположенный на другом веб-сервере, или же на страницу, отличную от ASP.NET (такую как HTML или ASP)

Метод Transfer() является наиболее быстрым способом перемещения пользователя на другую страницу приложения. При использовании этого метода не происходит полного цикла отправки. Вместо этого механизм ASP.NET просто загружает новую страницу и начинает ее обработку. В результате URL, отображаемый в браузере клиента, не меняется.

MapPath() представляет собой еще один полезный метод объекта Server. Например, предположим, что вы хотите загрузить из текущего виртуального каталога файл по имени info.txt. Вместо того чтобы жестко кодировать путь, вы можете воспользоваться методом Server.MapPath() и с его помощью преобразовать относительный путь к своему веб-приложению в полный физический путь.

Кодирование HTML и URL

Класс Server также содержит методы, преобразующие обычные строки в представление, которое может безопасно использоваться как часть URL или отображаться на веб-странице. Например, предположим, что вы собираетесь отобразить на веб-странице следующий текст:

При попытке записи этой информации на странице или ее помещении в элемент управления получится следующее:

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

На рисунке можно видеть новые записи в журнале:

Приступая к работе с API защиты данных в ASP.NET Core Get started with the Data Protection APIs in ASP.NET Core

В самом простейшем случае защита данных состоит из следующих этапов. At its simplest, protecting data consists of the following steps:

Создайте средство защиты данных от поставщика защиты данных. Create a data protector from a data protection provider.

Вызовите метод Protect с данными, которые необходимо защитить. Call the Protect method with the data you want to protect.

Вызовите метод Unprotect с данными, которые необходимо вернуть в обычный текст. Call the Unprotect method with the data you want to turn back into plain text.

Большинство платформ и моделей приложений, таких как ASP.NET Core или SignalR, уже настраивают систему защиты данных и добавляют их в контейнер службы, доступ к которому осуществляется посредством внедрения зависимостей. Most frameworks and app models, such as ASP.NET Core or SignalR, already configure the data protection system and add it to a service container you access via dependency injection. В следующем примере демонстрируется настройка контейнера службы для внедрения зависимостей и регистрация стека защиты данных, получение поставщика защиты данных через DI, создание предохранителя и защита, а также снятие защиты данных. The following sample demonstrates configuring a service container for dependency injection and registering the data protection stack, receiving the data protection provider via DI, creating a protector and protecting then unprotecting data.

При создании предохранителя необходимо указать одну или несколько строк назначения. When you create a protector you must provide one or more Purpose Strings. Строка назначения обеспечивает изоляцию между потребителями. A purpose string provides isolation between consumers. Например, средство защиты, созданное с помощью строки назначения «Green», не сможет снять защиту данных, предоставляемых предохранителем, с целью «фиолетовый». For example, a protector created with a purpose string of «green» wouldn’t be able to unprotect data provided by a protector with a purpose of «purple».

Экземпляры IDataProtectionProvider и IDataProtector являются потокобезопасными для нескольких вызывающих объектов. Instances of IDataProtectionProvider and IDataProtector are thread-safe for multiple callers. Предполагается, что после того, как компонент получает ссылку на IDataProtector через вызов CreateProtector , он будет использовать эту ссылку для нескольких вызовов Protect и Unprotect . It’s intended that once a component gets a reference to an IDataProtector via a call to CreateProtector , it will use that reference for multiple calls to Protect and Unprotect .

Вызов Unprotect выдаст исключение CryptographicException, если защищенные полезные данные не могут быть проверены или расшифрованы. A call to Unprotect will throw CryptographicException if the protected payload cannot be verified or deciphered. Некоторым компонентам может потребоваться пропускать ошибки во время операций снятия защиты. компонент, считывающий файлы cookie проверки подлинности, может обработать эту ошибку и обрабатывать запрос так, как если бы он не имел ни одного файла cookie, а не завершать запрос неверно. Some components may wish to ignore errors during unprotect operations; a component which reads authentication cookies might handle this error and treat the request as if it had no cookie at all rather than fail the request outright. Компоненты, которые должны использовать это поведение, должны специально перехватывать CryptographicException, а не проглатывание все исключения. Components which want this behavior should specifically catch CryptographicException instead of swallowing all exceptions.

Что такое ASP?

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

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

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

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

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

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

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

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 pagehit

Этот текст предназначен для тех, кто никогда не имел дела с 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-сервера. Вот пример ее использования:

Хостинг в Европе для новичков (от 25 руб/мес) и VIP-хостинг для профессионалов (от 1000 руб/мес)

Скидка 25% на все тарифы хостинга по промокоду STDCITF

Страничная модель ASP.NET 2.0 The ASP.NET 2.0 Page Model

В ASP.NET 1.x, разработчики были Выбор между модель встроенного кода и кода программной модели кода. In ASP.NET 1.x, developers had a choice between an inline code model and a code-behind code model. Кода могут быть реализованы с помощью атрибута Src или атрибут CodeBehind @Page директива. Code-behind could be implemented using either the Src attribute or the CodeBehind attribute of the @Page directive. В ASP.NET 2.0 разработчики по-прежнему имеют возможность выбора из встроенного кода и кода, но были внесены значительные улучшения в модель кода. In ASP.NET 2.0, developers still have a choice between inline code and code-behind, but there have been significant enhancements to the code-behind model.

В ASP.NET 1.x, разработчики были Выбор между модель встроенного кода и кода программной модели кода. In ASP.NET 1.x, developers had a choice between an inline code model and a code-behind code model. Кода могут быть реализованы с помощью атрибута Src или атрибут CodeBehind @Page директива. Code-behind could be implemented using either the Src attribute or the CodeBehind attribute of the @Page directive. В ASP.NET 2.0 разработчики по-прежнему имеют возможность выбора из встроенного кода и кода, но были внесены значительные улучшения в модель кода. In ASP.NET 2.0, developers still have a choice between inline code and code-behind, but there have been significant enhancements to the code-behind model.

Улучшения в модели кода Improvements in the Code-Behind Model

Чтобы полностью понять изменения в модель фонового кода в ASP.NET 2.0, мы рекомендуем быстро просмотреть модели, так как он существовал в ASP.NET 1.x. In order to fully understand the changes in the code-behind model in ASP.NET 2.0, its best to quickly review the model as it existed in ASP.NET 1.x.

Модель фонового кода в ASP.NET 1.x The Code-Behind Model in ASP.NET 1.x

В ASP.NET 1.x, модель фонового кода состоял из ASPX-файл (Webform) и файл кода, содержащий программный код. In ASP.NET 1.x, the code-behind model consisted of an ASPX file (the Webform) and a code-behind file containing programming code. Оба файла были соединены с помощью @Page директив в файле ASPX. The two files were connected using the @Page directive in the ASPX file. Каждый элемент управления на странице ASPX имел соответствующее объявление в файле кода в качестве переменной экземпляра. Each control on the ASPX page had a corresponding declaration in the code-behind file as an instance variable. Файл с выделенным кодом также содержится код для привязки событий и созданный код, необходимый для конструктора Visual Studio. The code-behind file also contained code for event binding and generated code necessary for the Visual Studio designer. Эта модель работала довольно хорошо, но так как каждый элемент ASP.NET на странице ASPX пройти соответствующий код в файл с выделенным кодом, было не true разделение кода и содержимое. This model worked fairly well, but because every ASP.NET element in the ASPX page required corresponding code in the code-behind file, there was no true separation of code and content. Например если конструктор добавлен новый серверный элемент управления на ASPX-файл вне Интегрированной среды разработки Visual Studio, приложение будет нарушена из-за отсутствия объявления для этого элемента управления в файле кода. For example, if a designer added a new server control to an ASPX file outside of the Visual Studio IDE, the application would break due to the absence of a declaration for that control in the code-behind file.

Модель фонового кода в ASP.NET 2.0 The Code-Behind Model in ASP.NET 2.0

ASP.NET 2.0 значительно улучшает эту модель. ASP.NET 2.0 greatly improves upon this model. В ASP.NET 2.0 кода реализуется с помощью нового разделяемые классы в ASP.NET 2.0. In ASP.NET 2.0, code-behind is implemented using the new partial classes provided in ASP.NET 2.0. Класс кода в ASP.NET 2.0 определяется как разделяемый класс, это означает, что он содержит только часть определения класса. The code-behind class in ASP.NET 2.0 is defined as a partial class meaning that it contains only part of the class definition. Оставшаяся часть определения класса создается динамически с ASP.NET 2.0, с помощью страницы ASPX, во время выполнения или при предкомпилированного веб-сайта. The remaining part of the class definition is dynamically generated by ASP.NET 2.0 using the ASPX page at runtime or when the Web site is precompiled. Связь между файл с выделенным кодом и страницы ASPX по-прежнему установлено с помощью директивы @ Page. The link between the code-behind file and the ASPX page is still established using the @ Page directive. Тем не менее вместо атрибута фонового кода или Src, ASP.NET 2.0 теперь использует атрибут CodeFile. However, instead of a CodeBehind or Src attribute, ASP.NET 2.0 now uses the CodeFile attribute. Атрибут Inherits также используется для указания имени класса для страницы. The Inherits attribute is also used to specify the class name for the page.

Типичная директива @ Page может выглядеть следующим образом: A typical @ Page directive might look like this:

Определение типичных класса в файле фонового кода ASP.NET 2.0 может выглядеть следующим образом: A typical class definition in an ASP.NET 2.0 code-behind file might look like this:

C# и Visual Basic являются только управляемые языки, которые в настоящее время поддерживает разделяемые классы. C# and Visual Basic are the only managed languages that currently support partial classes. Таким образом разработчики, использующие J# не будет иметь возможность использовать модель фонового кода в ASP.NET 2.0. Therefore, developers using J# will not be able to use the code-behind model in ASP.NET 2.0.

Новая модель расширяет возможности модели кода, так как разработчики получают файлы кода, которые содержат только код, который они создали. The new model enhances the code-behind model because developers will now have code files that contain only the code that they have created. Появились также true разделение кода и содержимое из-за объявления переменных не экземпляр в файле кода. It also provides for a true separation of code and content because there are no instance variable declarations in the code-behind file.

Так как разделяемый класс для ASPX-страницы является, где выполняется привязка события, Visual Basic разработчики могут реализовать увеличение незначительно увеличить производительность с помощью ключевого слова дескрипторов в коде для привязки событий. Because the partial class for the ASPX page is where event binding takes place, Visual Basic developers can realize a slight performance increase by using the Handles keyword in code-behind to bind events. C# имеет ключевое слово не эквивалент. C# has no equivalent keyword.

Новые атрибуты директива @ Page New @ Page Directive Attributes

ASP.NET 2.0 добавляет многие новые атрибуты в директиву @ Page. ASP.NET 2.0 adds many new attributes to the @ Page directive. Следующие атрибуты являются новыми в ASP.NET 2.0. The following attributes are new in ASP.NET 2.0.

Async Async

Атрибут Async позволяет настроить страницу для асинхронного выполнения. The Async attribute allows you to configure page to be executed asynchronously. Также охватывают асинхронных страниц позже в данном модуле. Well cover asynchronous pages later in this module.

AsyncTimeout AsyncTimeout

Указанное время ожидания для асинхронных страниц. Specified the timeout for asynchronous pages. Значение по умолчанию составляет 45 секунд. The default is 45 seconds.

CodeFile CodeFile

Атрибут CodeFile является заменой для атрибута фонового кода в Visual Studio 2002/2003. The CodeFile attribute is the replacement for the CodeBehind attribute in Visual Studio 2002/2003.

CodeFileBaseClass CodeFileBaseClass

Атрибут CodeFileBaseClass используется в тех случаях, когда несколько страниц, являются производными от одного базового класса. The CodeFileBaseClass attribute is used in cases where you want multiple pages to derive from a single base class. Из-за реализации разделяемых классов в ASP.NET, без этого атрибута базовый класс, который использует общие стандартных полей для ссылки на элементы управления, объявленные в страницы ASPX не будет работать должным образом так как ASP. Модуль компиляции сеть автоматически создаст новые элементы, в зависимости от элементов управления на странице. Because of the implementation of partial classes in ASP.NET, without this attribute, a base class that uses shared common fields to reference controls declared in an ASPX page would not work properly because ASP.NETs compilation engine will automatically create new members based on controls in the page. Таким образом, если требуется общий базовый класс для двух или более страниц в ASP.NET, будет необходимо определить укажите базового класса в атрибуте CodeFileBaseClass и наследуйте класс от этого базового класса каждого класса страницы. Therefore, if you want a common base class for two or more pages in ASP.NET, you will need to define specify your base class in the CodeFileBaseClass attribute and then derive each pages class from that base class. Атрибут CodeFile также является обязательным при использовании этого атрибута. The CodeFile attribute is also required when this attribute is used.

CompilationMode CompilationMode

Этот атрибут можно задать свойство CompilationMode страницы ASPX. This attribute allows you to set the CompilationMode property of the ASPX page. Свойство CompilationMode является перечислением, содержащий значения всегда, автоматически, и никогда. The CompilationMode property is an enumeration containing the values Always, Auto, and Never. По умолчанию используется всегда. The default is Always. Автоматически параметр будет препятствовать динамически по возможности компиляции страницы ASP.NET. The Auto setting will prevent ASP.NET from dynamically compiling the page if possible. Исключение из динамической компиляции страниц повышает производительность. Excluding pages from dynamic compilation increases performance. Тем не менее если страница, на которой исключается содержит этот код, который должен быть скомпилирован, ошибка возникает при просмотре страницы. However, if a page that is excluded contains that code that must be compiled, an error will be thrown when the page is browsed.

EnableEventValidation EnableEventValidation

Этот атрибут указывает, проверяются ли события обратной передачи и обратного вызова. This attribute specifies whether or not postback and callback events are validated. Когда эта функция включена, аргументы к обратной передаче или события обратного вызова проверяются, чтобы убедиться, что они исходят из серверного элемента управления, который изначально к просмотру их. When this is enabled, arguments to postback or callback events are checked to ensure that they originated from the server control that originally rendered them.

EnableTheming EnableTheming

Этот атрибут указывает, используются ли темы ASP.NET на странице. This attribute specifies whether or not ASP.NET themes are used on a page. Значение по умолчанию — false. The default is false. Охваченных тем ASP.NET 10 модуль. ASP.NET themes are covered in Module 10.

LinePragmas LinePragmas

Этот атрибут указывает, следует ли добавлять строки директивы pragma во время компиляции. This attribute specifies whether line pragmas should be added during compilation. Прагмы способами используемым отладчиками для выделения определенных разделов кода. Line pragmas are options used by debuggers to mark specific sections of code.

MaintainScrollPositionOnPostback MaintainScrollPositionOnPostback

Этот атрибут указывает, внедряется ли JavaScript в страницы для сохранения позиции прокрутки между обратными передачами. This attribute specifies whether or not JavaScript is injected into the page in order to maintain scroll position between postbacks. Этот атрибут является false по умолчанию. This attribute is false by default.

Если этот атрибут имеет true, ASP.NET добавит блок при обратной передаче, который выглядит следующим образом: When this attribute is true, ASP.NET will add a

Обратите внимание, что для этого блока скрипта src WebResource.axd. Note that the src for this script block is WebResource.axd. Этот ресурс не физический путь. This resource is not a physical path. При запросе этот сценарий, ASP.NET динамически создает скрипт. When this script is requested, ASP.NET dynamically builds the script.

MasterPageFile MasterPageFile

Этот атрибут указывает файл главной страницы для текущей страницы. This attribute specifies the master page file for the current page. Путь может быть относительным или абсолютным. The path can be relative or absolute. Главные страницы охваченных 4 модуля. Master pages are covered in Module 4.

StyleSheetTheme StyleSheetTheme

Этот атрибут можно переопределить свойства внешнего вида пользовательского интерфейса, определенные темы ASP.NET 2.0. This attribute allows you to override user-interface appearance properties defined by an ASP.NET 2.0 theme. Темы рассматриваются в 10 модуль. Themes are covered in Module 10.

Тема Theme

Определяет тему для страницы. Specifies the theme for the page. Если значение не указано для атрибута StyleSheetTheme, атрибут Theme переопределяет все стили, применимые к элементам управления на странице. If a value is not specified for the StyleSheetTheme attribute, the Theme attribute overrides all styles applied to controls on the page.

Заголовок Title

Задает заголовок для страницы. Sets the title for the page. Указанное здесь значение будет отображаться в элемент отображаемой страницы. The value specified here will appear in the element of the rendered page.

ViewStateEncryptionMode ViewStateEncryptionMode

Задает значение перечисления ViewStateEncryptionMode. Sets the value for the ViewStateEncryptionMode enumeration. Доступные значения: всегда, автоматически, и никогда. The available values are Always, Auto, and Never. Значение по умолчанию — автоматически. Если этот атрибут присвоено значение автоматически, шифруется viewstate — это элемент управления запрашивает его путем вызова RegisterRequiresViewStateEncryption метод. The default value is Auto. When this attribute is set to a value of Auto, viewstate is encrypted is a control requests it by calling the RegisterRequiresViewStateEncryption method.

Задание значений открытого свойства с помощью директива @ Page Setting Public Property Values via the @ Page Directive

Другой новой возможностью в директиву @ Page в ASP.NET 2.0 является возможность задать начальное значение из общих свойств базового класса. Another new capability of the @ Page directive in ASP.NET 2.0 is the ability to set the initial value of public properties of a base class. Предположим, например, что у вас есть открытое свойство именем SomeText в базового класса и d, как она будет инициализирована Hello при загрузке страницы. Suppose, for example, that you have a public property called SomeText in your base class and you d like it to be initialized to Hello when a page is loaded. Это можно сделать, просто установив его в директиве @ Page следующим образом: You can accomplish this by simply setting the value in the @ Page directive like so:

SomeText атрибута директивы @ Page задает начальное значение свойства SomeText в базовом классе для Hello!. The SomeText attribute of the @ Page directive sets the initial value of the SomeText property in the base class to Hello!. Видеоролик ниже приведено пошаговое описание начальное значение открытого свойства в базовом классе, используя директиву @ Page. The video below is a walkthrough of setting the initial value of a public property in a base class using the @ Page directive.

Новые открытые свойства класса страницы New Public Properties of the Page Class

Приведенные ниже открытые свойства являются новыми в ASP.NET 2.0. The following public properties are new in ASP.NET 2.0.

AppRelativeTemplateSourceDirectory AppRelativeTemplateSourceDirectory

Возвращает путь относительно приложения к страницы или элемента управления. Returns the application-relative path to the page or control. Например, для страницы, расположенный http://app/folder/page.aspx, это свойство возвращает

/ folder /. For example, for a page located at http://app/folder/page.aspx, the property returns

AppRelativeVirtualPath AppRelativeVirtualPath

Возвращает относительный виртуальный путь к каталогу для страницы или элемента управления. Returns the relative virtual directory path to the page or control. Например, для страницы, расположенный http://app/folder/page.aspx, это свойство возвращает

/ folder/page.aspx. For example for a page located at http://app/folder/page.aspx, the property returns

AsyncTimeout AsyncTimeout

Возвращает или задает время ожидания, используемое для обработки асинхронной страницы. Gets or sets the timeout used for asynchronous page handling. (Асинхронных страниц будет рассматриваться далее в этом модуле.) (Asynchronous pages will be covered later in this module.)

ClientQueryString ClientQueryString

Свойство только для чтения, которое возвращает часть строки запроса запрошенного URL-адреса. A read-only property that returns the query string portion of the requested URL. Это значение является URL-кодированием. This value is URL encoded. Метод UrlDecode класса HttpServerUtility можно использовать для его декодирования отсутствует. You can use the UrlDecode method of the HttpServerUtility class to decode it.

ClientScript ClientScript

Это свойство возвращает объект ClientScriptManager, который может использоваться для управления ASP.NETs вывод сценария на стороне клиента. This property returns a ClientScriptManager object that can be used to manage ASP.NETs emission of client-side script. (Позже в этом модуле рассматривается класса ClientScriptManager.) (The ClientScriptManager class is covered later in this module.)

EnableEventValidation EnableEventValidation

Это свойство определяет, включена ли проверка события для события обратной передачи и обратного вызова. This property controls whether or not event validation is enabled for postback and callback events. При включении проверяются аргументы к обратной передаче или события обратного вызова, убедитесь, что они исходят из серверного элемента управления, который изначально к просмотру их. When enabled, arguments to postback or callback events are verified to ensure that they originated from the server control that originally rendered them.

EnableTheming EnableTheming

Это свойство Возвращает или задает логическое значение, указывающее, применяется ли тема ASP.NET 2.0 на страницу. This property gets or sets a Boolean that specifies whether or not an ASP.NET 2.0 theme applies to the page.

Form Form

Это свойство возвращает HTML-формы на странице ASPX, как объект HtmlForm. This property returns the HTML form on the ASPX page as an HtmlForm object.

Header Header

Это свойство возвращает ссылку на объект HtmlHead, который содержит заголовок страницы. This property returns a reference to an HtmlHead object that contains the page header. Возвращаемый объект HtmlHead можно использовать для получения и задания таблицы стилей, метатегов и т. д. You can use the returned HtmlHead object to get/set style sheets, Meta tags, etc.

IdSeparator IdSeparator

Это свойство только для чтения получает символ, используемый для разделения идентификаторов элементов управления, создавая уникальный идентификатор для элементов управления на странице ASP.NET. This read-only property gets the character that is used to separate control identifiers when ASP.NET is building a unique ID for controls on a page. Он не предназначен для использования непосредственно в вашем коде. It is not intended to be used directly from your code.

IsAsync IsAsync

Это свойство позволяет асинхронных страниц. This property allows for asynchronous pages. Асинхронные страницы рассматриваются далее в этом модуле. Asynchronous pages are discussed later in this module.

IsCallback IsCallback

Это свойство только для чтения возвращает true Если страницы является результатом обратного вызова. This read-only property returns true if the page is the result of a call back. Обратных звонков, рассматриваются далее в этом модуле. Call backs are discussed later in this module.

IsCrossPagePostBack IsCrossPagePostBack

Это свойство только для чтения возвращает true Если страница является частью межстраничной обратной передачи. This read-only property returns true if the page is part of a cross-page postback. Далее в этом модуле рассматриваются межстраничной обратной передачи. Cross-page postbacks are covered later in this module.

Элементы Items

Возвращает ссылку на экземпляр IDictionary, содержащий все объекты, хранящиеся в контексте страницы. Returns a reference to an IDictionary instance that contains all objects stored in the pages context. Можно добавить элементы к этому объекту IDictionary, и они будут доступны вам на протяжении всего времени существования контекста. You can add items to this IDictionary object and they will be available to you throughout the lifetime of the context.

MaintainScrollPositionOnPostBack MaintainScrollPositionOnPostBack

Это свойство управляет ли ASP.NET генерирует JavaScript-код, который поддерживает прокручиваются страницы позицию в браузере после обратной передаче. This property controls whether or not ASP.NET emits JavaScript that maintains the pages scroll position in the browser after a postback occurs. (Подробности этого свойства были описаны ранее в этом модуле.) (Details of this property were discussed earlier in this module.)

Master Master

Это свойство только для чтения возвращает ссылку на экземпляр MasterPage для страницы, к которому был применен главной страницы. This read-only property returns a reference to the MasterPage instance for a page to which a master page has been applied.

MasterPageFile MasterPageFile

Возвращает или задает имя файла главной страницы для страницы. Gets or sets the master page filename for the page. Это свойство можно задать только в методе PreInit. This property can only be set in the PreInit method.

MaxPageStateFieldLength MaxPageStateFieldLength

Это свойство Возвращает или задает максимальную длину для состояния страницы в байтах. This property gets or sets the maximum length for the pages state in bytes. Если свойство имеет значение положительное число, состояние представления страницы будет разбить на несколько скрытых полей, чтобы он не превышает количество байтов, заданному. If the property is set to a positive number, the pages view state will be broken up into multiple hidden fields so that it doesnt exceed the number of bytes specified. Если свойство является отрицательным числом, состояние представления не быть разбивается на фрагменты. If the property is a negative number, the view state will not be broken into chunks.

PageAdapter PageAdapter

Возвращает ссылку на объект PageAdapter, изменяет страницы для запрашивающего браузера. Returns a reference to the PageAdapter object that modifies the page for the requesting browser.

PreviousPage PreviousPage

Возвращает ссылку на предыдущую страницу Server.Transfer или межстраничной обратной передачи. Returns a reference to the previous page in cases of a Server.Transfer or a cross-page postback.

Идентификатор SkinID SkinID

Задает обложку для применения к странице ASP.NET 2.0. Specifies the ASP.NET 2.0 skin to apply to the page.

StyleSheetTheme StyleSheetTheme

Это свойство Возвращает или задает таблицу стилей, которая применяется к странице. This property gets or sets the style sheet that is applied to a page.

TemplateControl TemplateControl

Возвращает ссылку на содержащий элемент управления для страницы. Returns a reference to the containing control for the page.

Тема Theme

Получает или задает имя темы ASP.NET 2.0, примененных к этой странице. Gets or sets the name of the ASP.NET 2.0 theme applied to the page. Это значение должно быть равно до метода PreInit. This value must be set prior to the PreInit method.

Заголовок Title

Это свойство получает или задает заголовок для страницы, полученный из заголовка страницы. This property gets or sets the title for the page as obtained from the pages header.

ViewStateEncryptionMode ViewStateEncryptionMode

Возвращает или задает ViewStateEncryptionMode страницы. Gets or sets the ViewStateEncryptionMode of the page. См. Подробное описание этого свойства ранее в этом модуле. See a detailed discussion of this property earlier in this module.

Новый защищенные свойства класса страницы New Protected Properties of the Page Class

Ниже приведены новые защищенного свойства класса страницы в ASP.NET 2.0. The following are the new protected properties of the Page class in ASP.NET 2.0.

Адаптер Adapter

Возвращает ссылку на ControlAdapter, которое осуществляет отрисовку страницы на устройстве, который запросил. Returns a reference to the ControlAdapter that renders the page on the device that requested it.

AsyncMode AsyncMode

Это свойство указывает, обрабатывается ли страница асинхронно. This property indicates whether or not the page is processed asynchronously. Он предназначен для использования средой выполнения, а не непосредственно в код. It is intended for use by the runtime and not directly in code.

ClientIDSeparator ClientIDSeparator

Это свойство возвращает символ, используемый в качестве разделителя, при создании уникальных клиентских идентификаторов для элементов управления. This property returns the character used as a separator when creating unique client IDs for controls. Он предназначен для использования средой выполнения, а не непосредственно в код. It is intended for use by the runtime and not directly in code.

PageStatePersister PageStatePersister

Это свойство возвращает объект PageStatePersister для страницы. This property returns the PageStatePersister object for the page. Это свойство в основном используется разработчиками элементов управления ASP.NET. This property is primarily used by ASP.NET control developers.

UniqueFilePathSuffix UniqueFilePathSuffix

Это свойство возвращает уникальный суффикс, добавляемый в путь к файлу для кэширования браузеров. This property returns a unique suffix that is appended to the file path for caching browsers. Значение по умолчанию — _ _ufps = и число из 6 цифр. The default value is __ufps= and a 6-digit number.

Новые общие методы для класса страницы New Public Methods for the Page Class

К классу страницы ASP.NET 2.0 появились следующие общие методы. The following public methods are new to the Page class in ASP.NET 2.0.

AddOnPreRenderCompleteAsync AddOnPreRenderCompleteAsync

Этот метод регистрирует делегаты обработчика событий для выполнения асинхронной страницы. This method registers event handler delegates for asynchronous page execution. Асинхронные страницы рассматриваются далее в этом модуле. Asynchronous pages are discussed later in this module.

ApplyStyleSheetSkin ApplyStyleSheetSkin

Применяет свойства в таблице стилей страницы на страницу. Applies the properties in a pages style sheet to the page.

ExecuteRegisteredAsyncTasks ExecuteRegisteredAsyncTasks

Этот метод существ асинхронной задачи. This method beings an asynchronous task.

GetValidators GetValidators

Возвращает коллекцию проверяющих элементов управления для указанной группы проверки или группы проверки по умолчанию, если ничего не указано. Returns a collection of validators for the specified validation group or the default validation group if none is specified.

Метод RegisterAsyncTask RegisterAsyncTask

Этот метод регистрирует новый асинхронной задачи. This method registers a new async task. Асинхронные страницы рассматриваются далее в этом модуле. Asynchronous pages are covered later in this module.

RegisterRequiresControlState RegisterRequiresControlState

Этот метод сообщает ASP.NET, что состояние элемента управления страницы должны сохраняться. This method tells ASP.NET that the pages control state must be persisted.

RegisterRequiresViewStateEncryption RegisterRequiresViewStateEncryption

Этот метод сообщает ASP.NET, что состояние представления страницы требует шифрования. This method tells ASP.NET that the pages viewstate requires encryption.

ResolveClientUrl ResolveClientUrl

Возвращает относительный URL-адрес, который может использоваться для клиентских запросов для изображений и т. д. Returns a relative URL that can be used for client requests for images, etc.

SetFocus SetFocus

Этот метод будет установить фокус на элемент управления, который указывается при начальной загрузке страницы. This method will set the focus to the control that is specified when the page is initially loaded.

UnregisterRequiresControlState UnregisterRequiresControlState

Этот метод отменяет регистрацию элемент управления, который передается как больше не требуется сохранение состояния элемента управления. This method will unregister the control that is passed to it as no longer requiring control state persistence.

Изменения в жизненный цикл страницы Changes to the Page Lifecycle

Жизненный цикл страницы в ASP.NET 2.0 не существенно изменилось, но есть несколько новых методов, которые следует учитывать. The page lifecycle in ASP.NET 2.0 hasn’t changed dramatically, but there are some new methods that you should be aware of. Ниже описан жизненный цикл страницы ASP.NET 2.0. The ASP.NET 2.0 page lifecycle is outlined below.

PreInit (новое в ASP.NET 2.0) PreInit (New in ASP.NET 2.0)

События PreInit является самым ранним этапом жизненного цикла, разработчик может получить доступ. The PreInit event is the earliest stage in the lifecycle that a developer can access. Добавление этого события позволяет программно изменять темы ASP.NET 2.0, главных страниц, доступ к свойствам профиля ASP.NET 2.0 и т. д. Если вы находитесь в обратной передачи состояния, важно осознавать, что Viewstate еще не был применен к элементам управления на этом этапе жизненного цикла. The addition of this event makes it possible to programmatically change ASP.NET 2.0 themes, master pages, access properties for an ASP.NET 2.0 profile, etc. If you are in a postback state, its important to realize that Viewstate has not yet been applied to controls at this point in the lifecycle. Таким образом Если разработчик изменяет свойство элемента управления на этом этапе, он скорее всего перезаписывается позже в жизненном цикле страницы. Therefore, if a developer changes a property of a control at this stage, it will likely be overwritten later in the pages lifecycle.

Init Init

Событие Init не отличается от ASP.NET 1.x. The Init event has not changed from ASP.NET 1.x. Это будет место для чтения или инициализации свойства элементов управления на странице. This is where you would want to read or initialize properties of controls on your page. В этой рабочей области, главные страницы, темы и т.д. уже применены к странице. At this stage, master pages, themes, etc. are already applied to the page.

InitComplete (введено в версии 2.0) InitComplete (New in 2.0)


Событие InitComplete вызывается в конце стадии инициализации страницы. The InitComplete event is called at the end of the pages initialization stage. На этом этапе жизненного цикла, доступны элементы управления на странице, но их состояние еще не заполнены. At this point in the lifecycle, you can access controls on the page, but their state has not yet been populated.

Предварительная загрузка (новое в версии 2.0) PreLoad (New in 2.0)

Это событие вызывается после применения всех данных обратной передачи и непосредственно перед страницы_нагрузки. This event is called after all postback data has been applied and just prior to Page_Load.

Load Load

Событие Load не отличается от ASP.NET 1.x. The Load event has not changed from ASP.NET 1.x.

LoadComplete (введено в версии 2.0) LoadComplete (New in 2.0)

Событие LoadComplete последнего события находится в стадии загрузки страницы. The LoadComplete event is the last event in the pages load stage. На этом этапе все данные обратной передачи и viewstate была применена к странице. At this stage, all postback and viewstate data has been applied to the page.

PreRender PreRender

При желании для состояние представления сохраняется должным образом для элементов управления, которые динамически добавляются на страницу, события PreRender является позднее можно будет добавить их. If you would like for viewstate to be properly maintained for controls that are added to the page dynamically, the PreRender event is the last opportunity to add them.

PreRenderComplete (введено в версии 2.0) PreRenderComplete (New in 2.0)

На этапе PreRenderComplete все элементы управления были добавлены к странице и странице готов к просмотру. At the PreRenderComplete stage, all controls have been added to the page and the page is ready to be rendered. События PreRenderComplete — это последнее событие, возникающее перед сохранением состояние представления страницы. The PreRenderComplete event is the last event raised before the pages viewstate is saved.

SaveStateComplete (введено в версии 2.0) SaveStateComplete (New in 2.0)

Событие SaveStateComplete вызывается сразу после сохранения состояния viewstate и управления для всей страницы. The SaveStateComplete event is called immediately after all page viewstate and control state has been saved. Это последнее событие, прежде чем фактически отображении страницы в браузере. This is the last event before the page is actually rendered to the browser.

Прорисовка Render

Метод Render не изменялась после ASP.NET 1.x. The Render method has not changed since ASP.NET 1.x. Именно HtmlTextWriter инициализируется и отображении страницы в браузере. This is where the HtmlTextWriter is initialized and the page is rendered to the browser.

Межстраничной обратной передачи в ASP.NET 2.0 Cross-Page Postback in ASP.NET 2.0

В ASP.NET 1.x, обратные передачи требовались для публикации на ту же страницу. In ASP.NET 1.x, postbacks were required to post to the same page. Не допускались межстраничной обратной передачи. Cross-page postbacks were not allowed. ASP.NET 2.0 добавлена возможность отправки обратно на другую страницу в интерфейсе IButtonControl. ASP.NET 2.0 adds the ability to post back to a different page via the IButtonControl interface. Любой элемент управления, который реализует новый интерфейс IButtonControl (кнопки LinkButton и ImageButton помимо сторонние пользовательские элементы управления) можно воспользоваться преимуществами этой новой функциональности, посредством использования атрибута PostBackUrl. Any control that implements the new IButtonControl interface (Button, LinkButton, and ImageButton in addition to third-party custom controls) can take advantage of this new functionality via the use of the PostBackUrl attribute. В следующем коде показано элемент управления кнопки, который выполняет обратную передачу вторую страницу. The following code shows a Button control that posts back to a second page.

При обратной отправке страницы, страницы, которая инициирует обратную передачу доступен через свойство PreviousPage на второй странице. When the page is posted back, the Page that initiates the postback is accessible via the PreviousPage property on the second page. Эта функциональная возможность реализуется с помощью нового веб-форма_DoPostBackWithOptions клиентской функции, если элемент управления выполняет обратную передачу другой страницы ASP.NET 2.0 отображает для страницы. This functionality is implemented via the new WebForm_DoPostBackWithOptions client-side function that ASP.NET 2.0 renders to the page when a control posts back to a different page. Новый обработчик WebResource.axd, который порождает скрипт клиенту предоставляется эта функция JavaScript. This JavaScript function is provided by the new WebResource.axd handler which emits script to the client.

Видеоролик ниже приведено пошаговое описание межстраничных обратную передачу. The video below is a walkthrough of a cross-page postback.

Дополнительные сведения о межстраничной обратной передачи More Details on Cross-Page Postbacks

ViewState Viewstate

Может запрос самостоятельно уже дальнейшие действия в состояние представления с первой страницы в сценарии межстраничной обратной передачи. You may have asked yourself already about what happens to the viewstate from the first page in a cross-page postback scenario. В конце концов любой элемент управления, который реализует интерфейс IPostBackDataHandler будет сохранять свое состояние через viewstate, таким образом доступ к свойствам элемента управления на второй странице межстраничной обратной передачи, необходимо иметь доступ к состояние представления страницы. After all, any control that does not implement IPostBackDataHandler will persist its state via viewstate, so to have access to the properties of that control on the second page of a cross-page postback, you must have access to the viewstate for the page. ASP.NET 2.0 берет на себя этот сценарий с помощью нового скрытое поле на второй странице вызывается _ _PREVIOUSPAGE. ASP.NET 2.0 takes care of this scenario using a new hidden field in the second page called __PREVIOUSPAGE. _ _PREVIOUSPAGE поле формы содержит viewstate для первой страницы, таким образом, чтобы получить доступ к свойствам всех элементов управления на второй странице. The __PREVIOUSPAGE form field contains the viewstate for the first page so that you can have access to the properties of all controls in the second page.

Обход FindControl Circumventing FindControl

В пошаговом руководстве видео межстраничной обратной передачи я использовал метод FindControl для получения ссылки на элемент управления TextBox на первой странице. In the video walkthrough of a cross-page postback, I used the FindControl method to get a reference to the TextBox control on the first page. Этот метод хорошо подходит для этой цели, но FindControl является дорогостоящим и требует написания дополнительного кода. That method works well for that purpose, but FindControl is expensive and it requires writing additional code. К счастью ASP.NET 2.0 представляет собой альтернативу FindControl для этой цели, которая будет работать во многих сценариях. Fortunately, ASP.NET 2.0 provides an alternative to FindControl for this purpose that will work in many scenarios. PreviousPageType-директива позволяет иметь строго типизированную ссылку на предыдущую страницу, используя имя типа или virtualPath-атрибут. The PreviousPageType directive allows you to have a strongly-typed reference to the previous page by using either the TypeName or the VirtualPath attribute. Атрибут TypeName позволяет указать тип предыдущей страницы, хотя атрибут VirtualPath позволяет ссылаться на предыдущую страницу, используя виртуальный путь. The TypeName attribute allows you to specify the type of the previous page while the VirtualPath attribute allows you to refer to the previous page using a virtual path. После установки PreviousPageType-директива, необходимо предоставить элементы управления, и т.д., к которому вы хотите разрешить доступ с помощью открытых свойств. After you’ve set the PreviousPageType directive, you must then expose the controls, etc. to which you want to allow access using public properties.

Лабораторное занятие 1 межстраничной обратной передачи Lab 1 Cross-Page Postback

В этой лабораторной работе вы создадите приложение, использующее новые функции межстраничной обратной передачи ASP.NET 2.0. In this lab, you will create an application that uses the new cross-page postback functionality of ASP.NET 2.0.

Откройте Visual Studio 2005 и создайте новый веб-узла ASP.NET. Open Visual Studio 2005 and create a new ASP.NET Web site.

Добавьте новый веб-форма вызывается page2.aspx. Add a new Webform called page2.aspx.

Откройте страницу Default.aspx в представлении конструктора и добавьте элемент управления Button и элемент управления TextBox. Open the Default.aspx in Design view and add a Button control and a TextBox control.

  1. Предоставить элемент управления Button с Идентификатором SubmitButton и текстовое поле управления Идентификатором UserName. Give the Button control an ID of SubmitButton and the TextBox control an ID of UserName.
  2. Присвойте свойству PostBackUrl кнопки page2.aspx. Set the PostBackUrl property of the Button to page2.aspx.

Откройте page2.aspx в представлении источника. Open page2.aspx in Source view.

Добавьте директиву @ PreviousPageType, как показано ниже: Add a @ PreviousPageType directive as shown below:

Добавьте следующий код к странице_нагрузку на page2.aspx кода: Add the following code to the Page_Load of page2.aspx’s code-behind:

Постройте проект, щелкнув меню «сборка» в сборке. Build the project by clicking on Build on the Build menu.

Добавьте приведенный ниже код программной части для Default.aspx: Add the following code to the code-behind for Default.aspx:

Изменение страницы_нагрузки в page2.aspx следующим: Change the Page_Load in page2.aspx to the following:

Выполните построение проекта. Build the project.

Запустите проект. Run the project.

Введите свое имя в текстовое поле и нажмите кнопку. Enter your name in the TextBox and click the button.

Что такое результат? What is the result?

Асинхронные страницы в среде ASP.NET 2.0 Asynchronous Pages in ASP.NET 2.0

Многие проблемы конфликтов в ASP.NET, вызваны задержка внешних вызовов (например, вызовы веб службы или базы данных), задержка ввода-ВЫВОДА файла и т. д. При запросе от приложения ASP.NET, ASP.NET использует один из рабочих потоков для обслуживания этого запроса. Many contention problems in ASP.NET are caused by latency of external calls (such as Web service or database calls), file IO latency, etc. When a request is made against an ASP.NET application, ASP.NET uses one of its worker threads to service that request. Этот запрос является владельцем этого потока до завершения запроса и отправки ответа. That request owns that thread until the request is complete and the response has been sent. ASP.NET 2.0 ищет для устранения проблемы задержки с помощью таких проблем, добавив возможность асинхронного выполнения страницы. ASP.NET 2.0 seeks to resolve latency issues with these types of issues by adding the capability to execute pages asynchronously. Это означает, что рабочий поток можно запустить запрос, который затем передается дополнительных выполнение другому потоку, тем самым возврат в пул доступных потоков быстро. That means that a worker thread can start the request and then hand off additional execution to another thread, thereby returning to the available thread pool quickly. После завершения файлового ввода-ВЫВОДА, обращение к базе данных и др., новый поток получается из пула потоков для завершения запроса. When the file IO, database call, etc. has completed, a new thread is obtained from the thread pool to finish the request.

Первым шагом в создании асинхронного выполнения страницы является установка Async атрибутов директивы page следующим образом: The first step in making a page execute asynchronously is to set the Async attribute of the page directive like so:

Этот атрибут сообщает ASP.NET, в реализации интерфейса IHttpAsyncHandler для страницы. This attribute tells ASP.NET to implement the IHttpAsyncHandler for the page.

Следующим шагом является вызов метода AddOnPreRenderCompleteAsync в определенный момент жизненный цикл страницы до PreRender. The next step is to call the AddOnPreRenderCompleteAsync method at a point in the lifecycle of the page prior to PreRender. (Этот метод обычно вызывается на странице_нагрузки.) Метод AddOnPreRenderCompleteAsync принимает два параметра; BeginEventHandler и EndEventHandler. (This method is typically called in Page_Load.) The AddOnPreRenderCompleteAsync method takes two parameters; a BeginEventHandler and an EndEventHandler. BeginEventHandler возвращает значение IAsyncResult, который затем передается как параметр EndEventHandler. The BeginEventHandler returns an IAsyncResult which is then passed as a parameter to the EndEventHandler.

Видео ниже приведено пошаговое описание запроса асинхронной страницы. The video below is a walkthrough of an asynchronous page request.

До завершения EndEventHandler асинхронной страницы, выполните следующие действия. не отобразить в обозревателе. An async page does not render to the browser until the EndEventHandler has completed. Без сомнения, но некоторые разработчики будут рассматривать запросов асинхронного как аналог для асинхронных обратных вызовов. No doubt but that some developers will think of async requests as being similar to async callbacks. Важно понимать, что они не имеют. It’s important to realize that they are not. Преимущество для асинхронных запросов заключается в том, что первый рабочий поток могут быть возвращены в пул потоков для обслуживания новых запросов, тем самым уменьшая состязания из-за привязки ввода-ВЫВОДА и т. д. The benefit to asynchronous requests is that the first worker thread can be returned to the thread pool to service new requests, thereby reducing contention due to being IO bound, etc.

Обратные вызовы из сценария в ASP.NET 2.0 Script Callbacks in ASP.NET 2.0

Веб-разработчикам искало способов избежать мерцания, связанных с обратным вызовом. Web developers have always looked for ways to prevent the flickering associated with a callback. В ASP.NET 1.x, SmartNavigation был наиболее распространенный способ избежать мерцания, но SmartNavigation вызвавшее проблемы для некоторых разработчиков из-за сложности его реализация на стороне клиента. In ASP.NET 1.x, SmartNavigation was the most common method for avoiding flickering, but SmartNavigation caused problems for some developers because of the complexity of its implementation on the client. ASP.NET 2.0 решает эту проблему с обратные вызовы из сценария. ASP.NET 2.0 addresses this issue with script callbacks. Обратные вызовы из сценария используйте XMLHttp для запросов к веб-сервера с помощью JavaScript. Script callbacks utilize XMLHttp to make requests against the Web server via JavaScript. XMLHttp запрос возвращает XML-данных, который затем можно обрабатывать с помощью модели DOM обозревателя The XMLHttp request returns XML data that can then be manipulated via the browser’s DOM. XMLHttp кода будет скрыт от пользователя с новым обработчиком WebResource.axd. XMLHttp code is hidden from the user by the new WebResource.axd handler.

Существуют несколько шагов, которые необходимы для настройки обратный вызов сценария в ASP.NET 2.0. There are several steps that are necessary in order to configure a script callback in ASP.NET 2.0.

Шаг 1. Реализация интерфейса ICallbackEventHandler Step 1 : Implement the ICallbackEventHandler Interface

Чтобы ASP.NET для распознавания страницы как участвующего в обратном вызове скрипт должен реализовывать интерфейс ICallbackEventHandler. In order for ASP.NET to recognize your page as participating in a script callback, you must implement the ICallbackEventHandler interface. Это можно сделать в файле кода следующим образом: You can do this in your code-behind file like so:

Также это можно сделать с помощью директив like @ Implements так: You can also do this using the @ Implements directive like so:

При использовании встроенного кода ASP.NET, обычно используется директива @ Implements. You would typically use the @ Implements directive when using inline ASP.NET code.

Шаг 2. Вызов GetCallbackEventReference Step 2 : Call GetCallbackEventReference

Как упоминалось ранее, вызов XMLHttp инкапсулирован в обработчик WebResource.axd. As mentioned previously, the XMLHttp call is encapsulated in the WebResource.axd handler. При отображении страницы ASP.NET будет добавить вызов веб-форма_DoCallback, клиентский скрипт, который предоставляется WebResource.axd. When your page is rendered, ASP.NET will add a call to WebForm_DoCallback, a client script that is provided by WebResource.axd. Веб-форма_DoCallback функция заменяет _ _doPostBack функция обратного вызова. The WebForm_DoCallback function replaces the __doPostBack function for a callback. Помните, что _ _doPostBack программно отправляет форму на странице. Remember that __doPostBack programmatically submits the form on the page. В сценарии обратного вызова, необходимо предотвратить обратную передачу, так что _ _doPostBack не подойдет. In a callback scenario, you want to prevent a postback, so __doPostBack will not suffice.

__doPostBack по-прежнему отображается на страницу в клиентском сценарии обратного вызова сценария. __doPostBack is still rendered to the page in a client script callback scenario. Тем не менее он не используется для обратного вызова. However, it’s not used for the callback.

Аргументы для веб-форма_DoCallback клиентской функции предоставляются через функцию на сервере GetCallbackEventReference, который обычно вызывается в странице_нагрузки. The arguments for the WebForm_DoCallback client-side function are provided via the server-side function GetCallbackEventReference which would normally be called in Page_Load. Типичный вызов GetCallbackEventReference может выглядеть следующим образом: A typical call to GetCallbackEventReference might look like this:

В этом случае cm — это экземпляр объекта ClientScriptManager. In this case, cm is an instance of ClientScriptManager. Классу ClientScriptManager будет рассматриваться далее в этом модуле. The ClientScriptManager class will be covered later in this module.

Существует несколько перегруженных версий GetCallbackEventReference. There are several overloaded versions of GetCallbackEventReference. В этом случае аргументы являются следующим образом: In this case, the arguments are as follows:

Ссылка на элемент управления, где вызывается GetCallbackEventReference. A reference to the control where GetCallbackEventReference is being called. В этом случае это сама страница. In this case, it’s the page itself.

Строковый аргумент, который будет передан из клиентского кода на стороне сервера событие. A string argument that will be passed from the client-side code to the server-side event. В этом случае обмена мгновенными сообщениями, передача значения из раскрывающегося списка вызывается ddlCompany. In this case, Im passing the value of a dropdown called ddlCompany.

Имя клиентской функции, которая будет принимать возвращаемое значение (в форме строки) из события обратного вызова на стороне сервера. The name of the client-side function that will accept the return value (as string) from the server-side callback event. Эта функция будет вызываться только в тех случаях, если обратный вызов на стороне сервера выполнена успешно. This function will only be called when the server-side callback is successful. Таким образом для обеспечения надежности, обычно рекомендуется использовать перегруженную версию GetCallbackEventReference, который принимает в качестве аргумента дополнительную строку, указав имя клиентской функции для выполнения в случае возникновения ошибки. Therefore, for the sake of robustness, it is generally recommended to use the overloaded version of GetCallbackEventReference that takes an additional string argument specifying the name of a client-side function to execute in the event of an error.

Строка, представляющая функции стороны клиента, инициировавший перед обратным вызовом на сервер. A string representing a client-side function that it initiated before the callback to the server. В этом случае нет нет такого сценария, поэтому значением аргумента является null. In this case, there is no such script, so the argument is null.

Логическое значение, указав ли поведения обратного вызова асинхронно. A Boolean specifying whether or not to conduct the callback asynchronously.

Вызов веб-форма_DoCallback на клиенте будет передавать эти аргументы. The call to WebForm_DoCallback on the client will pass these arguments. Таким образом, когда эта страница отображается на клиенте, этот код будет выглядеть следующим образом: Therefore, when this page is rendered on the client, that code will look like so:

Обратите внимание на то, что сигнатура функции на стороне клиента немного отличается. Notice that the signature of the function on the client is a bit different. Клиентской функции передает 5 строк и логическое значение. The client-side function passes 5 strings and a Boolean. Дополнительные строки (который имеет значение null, если в приведенном выше примере) содержит функции стороны клиента, который будет обрабатывать все ошибки из обратного вызова на стороне сервера. The additional string (which is null in the above example) contains the client-side function that will handle any errors from the server-side callback.

Шаг 3. Подключить клиентский элемент управления событие Step 3 : Hook the Client-Side Control Event

Обратите внимание, что возвращаемое значение GetCallbackEventReference выше был назначен строковой переменной. Notice that the return value of GetCallbackEventReference above was assigned to a string variable. Эта строка используется для подключения на стороне клиента событие элемента управления, который инициирует обратный вызов. That string is used to hook a client-side event for the control that initiates the callback. В этом примере обратный вызов инициируется раскрывающийся список на странице, поэтому я бы хотел подключить OnChange событий. In this example, the callback is initiated by a dropdown on the page, so I want to hook the OnChange event.

Чтобы подключить событие на стороне клиента, просто добавляется обработчик к разметке клиентские следующим образом: To hook the client-side event, simply add a handler to the client-side markup as follows:

Помните, что cbRef является возвращаемым значением из вызова GetCallbackEventReference. Recall that cbRef is the return value from the call to GetCallbackEventReference. Она содержит вызов веб-форма_DoCallback, который был показан выше. It contains the call to WebForm_DoCallback that was shown above.

Шаг 4. Регистрация клиентского скрипта Step 4 : Register the Client-Side Script

Вспомним, что вызов GetCallbackEventReference указано, что клиентский скрипт с именем ShowCompanyName будет выполняться после успешного завершения обратного вызова на стороне сервера. Recall that the call to GetCallbackEventReference specified that a client-side script called ShowCompanyName would be executed when the server-side callback succeeds. Этот скрипт должен быть добавлен на страницу, с помощью экземпляра ClientScriptManager. That script needs to be added to the page using a ClientScriptManager instance. (Класса ClientScriptManager будет рассказано далее в этом модуле.) Как выполнять такие: (The ClientScriptManager class will be discussed later in this module.) You do that like so:

Шаг 5. Вызовите методы интерфейса ICallbackEventHandler Step 5 : Call the Methods of the ICallbackEventHandler Interface

ICallbackEventHandler содержит два метода, которые необходимо реализовать в коде. The ICallbackEventHandler contains two methods that you need to implement in your code. Они являются RaiseCallbackEvent и GetCallbackEvent. They are RaiseCallbackEvent and GetCallbackEvent.

RaiseCallbackEvent принимает в качестве аргумента строку и не возвращает ничего. RaiseCallbackEvent takes a string as an argument and returns nothing. Строковый аргумент передается из клиентского вызова веб-форма_DoCallback. The string argument is passed from the client-side call to WebForm_DoCallback. В этом случае это значение является значение атрибут называется ddlCompany раскрывающегося списка. In this case, that value is the value attribute of the dropdown called ddlCompany. Код на стороне сервера должен размещаться в методе RaiseCallbackEvent. Your server-side code should be placed in the RaiseCallbackEvent method. Например если обратного вызова совершает WebRequest на внешний ресурс, этот код должен располагаться в RaiseCallbackEvent. For example, if your callback is making a WebRequest against an external resource, that code should be placed in RaiseCallbackEvent.

GetCallbackEvent отвечает за обработку возврата обратного вызова клиента. GetCallbackEvent is responsible for processing the return of the callback to the client. Он не принимает аргументы и возвращает строку. It takes no arguments and returns a string. Строку, которая его возвращает будут передаваться в качестве аргумента функции клиентской стороны, в этом случае ShowCompanyName. The string that it returns will be passed as an argument to the client-side function, in this case ShowCompanyName.

Когда вы выполнили описанные выше действия, вы будете готовы выполнить обратный вызов сценария в ASP.NET 2.0. Once you have completed the above steps, you are ready to perform a script callback in ASP.NET 2.0.

В любом браузере, поддерживающем вызовах XMLHttp поддерживаются обратные вызовы из сценария в ASP.NET. Script callbacks in ASP.NET are supported in any browser that supports making XMLHttp calls. Включает все современные браузеры используется уже сегодня. That includes all of the modern browsers in use today. Internet Explorer использует объекта XMLHttp ActiveX, а других современных браузеров (включая предстоящих Internet Explorer 7) используйте встроенный объект XMLHttp. Internet Explorer uses the XMLHttp ActiveX object while other modern browsers (including the upcoming IE 7) use an intrinsic XMLHttp object. Чтобы программно определять, если браузер поддерживает обратные вызовы, можно использовать Request.Browser.SupportCallback свойство. To programmatically determine if a browser supports callbacks, you can use the Request.Browser.SupportCallback property. Это свойство будет возвращать true если запрашивающий клиент поддерживает обратные вызовы из сценария. This property will return true if the requesting client supports script callbacks.

Работа с клиентского сценария в ASP.NET 2.0 Working with Client Script in ASP.NET 2.0

Клиентские сценарии в среде ASP.NET 2.0 осуществляется через использование класса ClientScriptManager. Client scripts in ASP.NET 2.0 are managed via the use of the ClientScriptManager class. Следит за клиентских скриптов, используя тип и имя класса ClientScriptManager. The ClientScriptManager class keeps track of client scripts using a type and a name. Это предотвращает тот же сценарий программными средствами на страницу добавляется более одного раза. This prevents the same script from being programmatically inserted on a page more than once.

После сценарий успешно зарегистрирован на странице, все последующие попытки зарегистрировать тот же скрипт просто приведет к скрипт не зарегистрирован еще раз. After a script has been successfully registered on a page, any subsequent attempt to register the same script will simply result in the script not being registered a second time. Повторяющиеся скрипты не будут добавлены, и исключение не возникает. No duplicate scripts are added and no exception occurs. Чтобы избежать ненужных вычислений, существуют методы, которые можно использовать для определения, уже зарегистрирован ли скрипт таким образом, не пытайтесь зарегистрировать более одного раза. To avoid unnecessary computation, there are methods that you can use to determine if a script is already registered so that you do not attempt to register it more than once.

Методы класса ClientScriptManager должны быть знакомы всем текущем разработчикам ASP.NET: The methods of the ClientScriptManager should be familiar to all current ASP.NET developers:

RegisterClientScriptBlock RegisterClientScriptBlock

Этот метод добавляет скрипт к началу страницы, отображаемой страницы. This method adds a script to the top of the rendered page. Это полезно для добавления функций, которые будут вызываться явным образом на клиенте. This is useful for adding functions that will be explicitly called on the client.

Существует две перегруженные версии этого метода. There are two overloaded versions of this method. Три из четырех аргументов являются общими для них. Three of four arguments are common among them. Они приведены ниже. They are:

Тип аргумент определяет тип скрипта. The type argument identifies a type for the script. Обычно рекомендуется использовать тип страницы (это. GetType()) для типа. It is generally a good idea to use the page’s type (this.GetType()) for the type.

Ключ аргумент — это определяемые пользователем ключ для скрипта. The key argument is a user-defined key for the script. Это должно быть уникальным для каждого сценария. This should be unique for each script. Если попытаться добавить скрипт в один и тот же ключ и тип, уже добавленных сценария, он не добавляется. If you attempt to add a script with the same key and type of an already added script, it will not be added.

Скрипт аргумент является строка, содержащая фактическое сценарий для добавления. The script argument is a string containing the actual script to add. Рекомендуется использовать для создания скрипта и затем использовать метод ToString() StringBuilder для назначения StringBuilder скрипт аргумент. It’s recommended that you use a StringBuilder to create the script and then use the ToString() method on the StringBuilder to assign the script argument.

При использовании перегруженных RegisterClientScriptBlock, который принимает только три аргумента, необходимо включить элементы сценария ( и ) в скрипте. If you use the overloaded RegisterClientScriptBlock that only takes three arguments, you must include script elements () in your script.

Вы можете использовать перегрузку, принимающую четвертый аргумент RegisterClientScriptBlock. You may choose to use the overload of RegisterClientScriptBlock that takes a fourth argument. Четвертый аргумент — логическое значение, указывающее ли ASP.NET следует добавить элементы сценария для вас. The fourth argument is a Boolean that specifies whether or not ASP.NET should add script elements for you. Если этот аргумент равен true, сценарий не должен содержать элементы сценария явным образом. If this argument is true, your script should not include the script elements explicitly.

Метод IsClientScriptBlockRegistered используется для определения, если скрипт уже был зарегистрирован. Use the IsClientScriptBlockRegistered method to determine if a script has already been registered. Это позволяет избежать попытка повторно зарегистрировать скрипт, который уже был зарегистрирован. This allows you to avoid an attempt to re-register a script that has already been registered.

RegisterClientScriptInclude (введено в версии 2.0) RegisterClientScriptInclude (New in 2.0)

Тег RegisterClientScriptInclude создает блок сценария, ссылающийся на внешний файл скрипта. The RegisterClientScriptInclude tag creates a script block that links to an external script file. У него есть две перегрузки. It has two overloads. Одна перегрузка берет ключ и URL-адрес. One takes a key and a URL. Второй добавляет третий аргумент, задающий тип. The second adds a third argument specifying the type.

Например следующий код приводит блок сценария, связанный с jsfunctions.js в корневой папке сценариев приложения: For example, the following code generates a script block that links to jsfunctions.js in the root of the scripts folder of the application:

Этот код создает следующий код в отображаемой странице: This code produces the following code in the rendered page:

Блок скрипта отображается в нижней части страницы. The script block is rendered at the bottom of the page.

Метод IsClientScriptIncludeRegistered используется для определения, если скрипт уже был зарегистрирован. Use the IsClientScriptIncludeRegistered method to determine if a script has already been registered. Это позволяет избежать попытка повторно зарегистрировать скрипт. This allows you to avoid an attempt to re-register a script.

RegisterStartupScript RegisterStartupScript

Метод RegisterStartupScript принимает те же аргументы, что метод RegisterClientScriptBlock. The RegisterStartupScript method takes the same arguments as the RegisterClientScriptBlock method. Скрипт, зарегистрированный с RegisterStartupScript выполняет после загрузки страницы, но до события OnLoad на стороне клиента. A script registered with RegisterStartupScript executes after the page loads but before the OnLoad client-side event. В версии 1.X, скрипты, зарегистрированные с помощью RegisterStartupScript были размещены непосредственно перед закрывающим тег пока скрипты, зарегистрированные с помощью RegisterClientScriptBlock были размещены сразу же после открытия тега. In 1.X, scripts registered with RegisterStartupScript were placed just before the closing tag while scripts registered with RegisterClientScriptBlock were placed immediately after the opening тега. In ASP.NET 2.0, both are placed immediately before the closing tag.

Если зарегистрировать функцию с RegisterStartupScript, этой функции не будет выполняться, пока вы явно вызвать в код на стороне клиента. If you register a function with RegisterStartupScript, that function will not execute until you explicitly call it in client-side code.

Метод IsStartupScriptRegistered позволяет определить, если скрипт уже был зарегистрирован и избежать попытка повторно зарегистрировать скрипт. Use the IsStartupScriptRegistered method to determine if a script has already been registered and avoid an attempt to re-register a script.

Другие методы ClientScriptManager Other ClientScriptManager Methods

Ниже приведен ряд других полезных методов класса ClientScriptManager. Here are some of the other useful methods of the ClientScriptManager class.

Коды всех ошибок

Что такое коды ответов и ошибок сервера?

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

Важно! Нельзя считать все ответы сервера ошибками, далее показано о чем они сообщают:

  1. Коды 100-199 — Запрос браузера принят, и обрабатывается
  2. Коды 200-299 — Запрос обработан, и браузеру отправили то, что он хотел
  3. Коды 300-399 — Сервер отправит пользователю не то, что он хотел
  4. Коды 400-499 — Ошибка на стороне пользователя
  5. Коды 500-599 — Ошибка на стороне сервера

Коды 100-199

100 Continue

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

101 Switching Protocols

Сервер (по требованию браузера) переключил протоколы. Это задание передается серверу в заголовке Upgrade.

Коды 200-299

200 Ok

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

201 Created

Код сообщает, что сервером создан новый идентификатор URI. В ответе сервера (заголовок Location) можно найти место куда именно были помещены созданные данные.

202 Accepted

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

203 Non-Authoritative Information

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

204 No Content

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

205 Reset Content

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

206 Partial Content

Сервер принял запрос и вернул только определенную часть данных, которые были запрошены. Какую именно часть нужно вернуть серверу, указывается в заголовке запроса пользователя Range. А сервер указывает это в своем ответе (смотрите заголовок Content-Range).

Коды 300-399

300 Multiple Choices

Код показывает, что один и тот же URL ведет к нескольким документам или страницам. Примером может служить одна и та же страница переведенная на несколько языков. Более подробно о причине ошибки, нужно узнавать в теле ответа сервера. Но чаще всего проблема кроется в заголовках или адресах объектов, и если указать их правильно, то ошибка исчезнет. Важно знать, что данная ошибка может вредить правильной индексации Вашего сайта поисковиками.

301 Moved Permanently

Пользователь запросил объект (страницу), который уже не используется сервером. А сервер в свою очередь перенаправляет пользователя на другую страницу, которая и отображается в браузере. Важно понимать, что поисковый робот перестанет индексировать исходную страницу, и вместо нее будет индексировать ту, на которую идет перенаправление. Этот способ чаще всего используется для редиректа — перенаправленния с одной страницы на другую. Для этого в файле .htaccess прописываем:

Redirect 301 /page1.html http://вашсайт.ru/page2.html

302 Moved Temporarily

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

303 See Other

Сообщение говорит о том, что запрошенный пользователем объект (страница) находится по другому адресу, и доступ к нему нужно получать GET-запросом. Новый адрес указывается в заголовке Location.

304 Not Modified

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

305 Use Proxy

Доступ к объекту (странице сайта) может быть разрешен только с помощью proxy-сервера, адрес которого указывается в заголовке Location.

307 Temporary Redirect

Код почти идентичен 302 Moved Temporarily, но более валидный.

Коды 400-499

400 Bad Request

Сервер не понял запрос браузера пользователя из-за синтаксической ошибки.

401 Unauthorized

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

402 Payment Required

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

403 Forbidden

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

404 Not Found

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

405 Method Not Allowed

В запросе (строка Request-Line) указан такой метод, который не поддерживается сервером. Часто это происходит при отправке POST-данных на неправильную страницу. Соответственно, чтобы решить эту проблему проверьте правильность указанного пути (атрибут action).

406 Not Acceptable

Пользователь пытается посмотреть документ, который существует на сервере, но имеет кодировку\язык\формат, которые не поддерживаются у пользователя. В итоге нужно искать причину в заголовках Content-Language, Content-Encoding или Content-Type.

407 Proxy Authentication Required

Сообщает о том, что запрос proxy-сервера должен быть санкционирован (заголовок Proxy-Authenticate).

408 Request Time-out

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

409 Conflict

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

410 Gone

Пользователь пытается посмотреть объект (страницу сайта), который не существует. Но раньше он существовал, и был навсегда удален с сервера.

411 Length Required

Запрос не будет принят сервером, пока не определится заголовок Content-Length.

413 Request Entity Too Large

Запрос передаваемый на сервер очень большой, поэтому сервер его не может обработать. Все подробности нужно смотреть в содержании ответа, т.к. там и кроется причина данной ошибки.

414 Request URL Too Long

URL который запрашивает пользователь слишком длинный, поэтому сервер не может его обработать. Для решения проблемы проверьте правильность URL и его длинну, а также обратите внимание на атрибут Request-URI.

415 Unsupported Media Type

Сервер не поддерживает формат запроса пользователя, поэтому не может его обработать.

416 Requested Range Not Satisfiable

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

417 Expectation Failed

Обычно эта ошибка возникает из-за того, что значение поля запроса Expect является некорректным.

422 Unprocessable Entity

Одна или несколько частей не могут быть обработаны сервером.

423 Locked

Запрашиваемый объект (страница сайта) заблокирован.

424 Failed Dependency

Один из ресурсов (зависимых) недоступен или блокирован, поэтому сервер не может дать доступ к нему.

426 Upgrade Required

Сервер принял запрос по стандартному соединению, но запрашивает SSL-соединение, которое не поддерживается клиентом. В итоге сервер выдает ошибку 426.

Коды 500-599

500 Internal Server Error

Данный код сообщает, что на сервере произошла внутренняя непредвиденная ошибка или аварийный отказ.

501 Not Implemented

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

502 Bad Gateway

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

503 Service Unavailable

Эта ошибка означает, что сервер временно перестал работать. Как правило это происходит если он находится в состоянии перезагрузки или отключен на временное обслуживание. Если вместе с сообщением об ошибке пришел параметр Retry-After, то его значение и будет тем временем, через которое сервер должен восстановить работу.

504 Gateway Time-out

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

505 HTTP Version not supported

Пользователь отправил серверу запрос с версией http-протокола, который не поддерживается.

507 Insufficient Storage

Места на диске недостаточно, и сервер не может обработать запрос пользователя. Или освободите место самостоятельно, или обратитесь в службу поддержки, т.к. в случае с виртуальным хостингом (или VPS) на Вашем сервере находятся еще и сайты других пользователей, удалить которые Вы не сможете.

510 Not Extended

Расширение запрашиваемого файла не поддерживается или отсутствует.

Юзеры ( 4 ) оценили на 4.8 из 5

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

Также мы собрали тарифы от тысяч хостеров, чтобы вы могли выбрать хостинг по конкретной цене.

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

Виртуальный хостинг — подходит для большинства проектов начального уровня с посещаемостью до 1000 человек в сутки. В таком хостинге мощность сервера делится между несколькими хостинговыми аккаунтами. Услуга проста в настройке даже для новичков.

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

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

Размещение и обслуживание вашего собственного сервера в дата-центре хостинга — это не очень популярная услуга и требуется в исключительных случаях.

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

Тестовый период — предоставляется хостером бесплатно на 7-30 дней, чтобы вы могли удостовериться в его качестве.

Moneyback — период на протяжении которого хостер обязуется вернуть деньги, если вам не понравится хостинг.

Означает какая операционная система установлена на сервере хостинга. Мы рекомендуем размещать на серверах с Linux, если нет особых требований у разработчиков сайта.

Абузоустойчивый хостинг — компании, которые разрешают размещать практически любой контент, даже запрещенный (спам, варез, дорвеи, порнографические материалы). Такие компании не удаляют контент вашего веб-сайта при первой же жалобе (“абузе”).

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

Безопасный хостинг — тот, где администрация постоянно обновляет ПО установленное на серверах, устанавливает базовую защиту от DDoS-атак, антивирус и файерволлы, блокирует взломанные сайты и помогает их «лечить».

Защита от DDOS — компании, которые предоставляют хостинг с защитой от DDoS-атак. Такие пакеты ощутимо дороже обычных, но они стоят своих денег, так как ваш сайт будет защищен от всех видов сетевых атак.

На языке программирования PHP и базах данных MySQL сейчас работает большинство сайтов. Они же поддерживаются практически всеми современными хостингами.

ASP.NET — платформа для разработки веб-приложений от Майкрософт.

От панели управления зависит ваше удобство в настройке хостинге\сайта.

Большинство качественных хостингов из нашего ТОПа используют удобные панели управления, поэтому рекомендуем больше внимания уделить другим параметрам при выборе.

В ASP.NET, что называется кодом ASP?

Подробнее на мой вопрос:

HTML и JavaScript называются «клиентским кодом».

С# и VB в файлах, находящихся за кодом, называются «серверным кодом».

Итак, что такое код inline-asp и ‘runat = server’, который называется?

Лучший термин, который я могу придумать, — это «код веб-форм».

Чтобы быть явным, Microsoft называет их встроенными блоками кода.

Они представляют собой кодовые блоки, встроенные в жизненный цикл страницы, вызываемые во время фазы Render.

Разделы ASP-страницы, начинающиеся с и заканчивающиеся на %> , являются фрагменты кода и

Части, начинающиеся с , являются директивами. Блоки рендеринга кода, начинающиеся с , являются просто короткой рукой для вызова writer.Write() в методе Page.Render() .

В разделе ASP на сайте MSDN они называются «script командами, » серверных команд script « и » первичные команды script.

Ниже я включил выдержки из сайта MSDN и ссылку ссылки.

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

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

Модель кода в Visual Studio

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

Visual Studio поддерживает две модели для кодирования веб-страниц:

Внутритекстовый код

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

Эта модель удобна, поскольку позволяет хранить все в одном месте безо всяких излишеств и потому часто применяется для кодирования простых веб-страниц.

Отделенный код (code-behind)

Эта модель подразумевает создание для каждой веб-страницы ASP.NET двух файлов: файла разметки (.aspx) с дескрипторами HTML и дескрипторами элементов управления, и файла кода (.cs) с исходным кодом страницы (при условии, что для программирования веб-страницы применяется язык C#). Такая модель обеспечивает более удобную схему организации, позволяя отделять пользовательский интерфейс от программной логики, что очень важно при создании сложных страниц.

Чтобы лучше понять, в чем состоит разница между моделями внутритекстового и отделенного кода, не помешает рассмотреть какую-нибудь простую страницу. В следующем примере показан код разметки для страницы по имени WebForm1.aspx, который отображает текущее время в текстовой метке и обновляет страницу всякий раз, когда в ней выполняется щелчок на кнопке. В случае использования модели внутритекстового кода эта страница будет выглядеть следующим образом:

Приведенные ниже коды файлов WebForm1.aspx и WebForm1.aspx.cs демонстрируют, как эта же страница будет поделена на две части в случае использования модели отделенного кода:

Единственное реальное отличие между примером с внутритекстовым кодом и примером с отделенным кодом состоит в том, что в последнем случае класс страницы больше не является неявным, а наоборот — объявляется как класс, содержащий все методы страницы.

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

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

Каждая страница .aspx начинается с директивы Page, указывающей язык для страницы и сообщающей ASP.NET местонахождение связанного кода (если только не используется встроенный код; в этом случае код содержится в том же самом файле).

Определять местонахождение связанного кода можно несколькими способами. В более старых версиях ASP.NET было распространено использование атрибута Src для указания на исходный код либо атрибута Inherits для указания на имя скомпилированного класса. Однако обе эти возможности имеют свои индивидуальные особенности.

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

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

Когда есть такая часть инфраструктуры, все остальное несложно. Для указания используемого класса в странице .aspx применяется атрибут Inherits, а для указания файла, в котором содержится отделенный код — атрибут CodeBehind:

Обратите внимание, что Visual Studio использует несколько необычный синтаксис именования для файла исходного кода. Он содержит полное имя соответствующей веб-страницы, снабженное расширением .aspx и в конце сопровождаемое расширением .cs. Это просто соглашение, помогающее избежать проблемы при создании двух различных типов файлов отделенного кода (например, веб-страницы и веб-службы) с одинаковыми именами.

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

При запросе веб-страницы в окне браузера ASP.NET сначала отыскивает связанный с ней файл кода, а затем генерирует объявление переменной для каждого присутствующего в ней серверного элемента управления (т.е. для каждого элемента, у которого имеется атрибут runat=»server»).

Например, предположим, что есть текстовое поле по имени txtInput:

ASP.NET сгенерирует для него следующее объявление переменной экземпляра и объединит его с классом страницы с помощью «волшебного» механизма частичных классов:

Конечно, вы этого объявления не увидите, поскольку оно является частью автоматически генерируемого кода, который создает компилятор .NET. Но вы будете полагаться на него всякий раз, когда будете писать строку кода, ссылающуюся на объект txtInput (для чтения или записи свойства):

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

Кстати, вы заметите, что переменные элементов управления всегда объявляются с помощью ключевого слова protected (обозначающего защищенный доступ). Все дело в способе, которым ASP.NET использует наследование в модели веб-страниц. Существуют следующие уровни:

Класс Page, входящий в состав библиотеки классов .NET, определяет базовый набор функциональных возможностей, которые позволяют веб-странице обслуживать другие элементы управления, визуализировать HTML-код и предоставлять доступ к традиционным объектам в стиле ASP вроде Request, Response и Session.

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

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

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

Связывание событий с обработчиками событий

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

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

Дважды щелкнуть на элементе управления в представлении визуального конструктора. В этом случае Visual Studio создаст обработчик события по умолчанию для этого элемента управления (и соответствующим образом настроит дескриптор элемента управления). Например, двойной щелчок на странице приводит к созданию обработчика события Page.Load, а двойной щелчок на кнопке — обработчика события Click.

Выбрать событие в окне Properties. Выделите элемент управления и щелкните на кнопке с изображением молнии в окне Properties. Вы увидите список всех событий, предоставляемых этим элементом управления. Дважды щелкните на поле рядом с событием, которое собираетесь обработать, и Visual Studio автоматически сгенерирует обработчик события в классе страницы и настроит дескриптор элемента управления:

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

В Visual Studio используется автоматическое образование цепочек событий, как показывает директива Page. Автоматическое образование цепочек событий основано на двух базовых принципах:

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

Все обработчики событий элемента управления подключаются с использованием атрибутов в дескрипторе элемента управления. Атрибут носит то же имя, что и событие, но имеет префикс On.

Например, если вы собираетесь обработать событие Click элемента управления Button, необходимо лишь установить атрибут OnClick в дескрипторе элемента управления с именем обработчика событий, который вы собираетесь использовать.

Конечно, если вы знакомы с событиями .NET, то знаете, что существует другой способ подключения обработчика событий. Это можно сделать динамически в коде с применением делегатов. Ниже представлен пример:

Этот подход служит для создания элементов управления «на лету».

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