Оригинальный автор(ы) | Майкрософт |
---|---|
Первоначальный выпуск | 2002 ( 2002 ) |
Операционная система | Окна |
Платформа | .NET Framework |
Тип | Фреймворк веб-приложений |
Веб-сайт | dotnet.microsoft.com/apps/aspnet/web-forms |
ASP.NET Web Forms — это фреймворк веб-приложений и одна из нескольких моделей программирования, поддерживаемых технологией Microsoft ASP.NET . Приложения Web Forms могут быть написаны на любом языке программирования , который поддерживает Common Language Runtime , например C# или Visual Basic . Основными строительными блоками страниц Web Forms являются серверные элементы управления , которые являются повторно используемыми компонентами, отвечающими за рендеринг HTML- разметки и реагирование на события. [1] Для сохранения состояния серверных элементов управления между HTTP- запросами , обычно не имеющими состояния , используется метод, называемый состоянием представления . [2]
Web Forms был включен в оригинальный выпуск .NET Framework 1.0 в 2002 году (см. Историю версий .NET Framework и Историю версий ASP.NET ), как первая модель программирования, доступная в ASP.NET. В отличие от более новых компонентов ASP.NET, Web Forms не поддерживается ASP.NET Core . [3]
Веб-страницы ASP.NET, официально известные как веб-формы, [4] были основными строительными блоками для разработки приложений в ASP.NET до появления MVC. [5] Существует две основные методологии для веб-форм: формат веб-приложения и формат веб-сайта. [6] Веб-приложения необходимо компилировать перед развертыванием, в то время как веб-сайты позволяют пользователю копировать файлы непосредственно на сервер без предварительной компиляции. Веб-формы содержатся в файлах с расширением ".aspx"; эти файлы обычно содержат статическую ( X ) HTML- разметку или разметку компонентов. Разметка компонентов может включать серверные веб-элементы управления и пользовательские элементы управления, которые были определены в фреймворке или веб-странице. Например, компонент текстового поля может быть определен на странице как , который отображается в поле ввода HTML. Кроме того, динамический код, который выполняется на сервере, может быть размещен на странице внутри блока , что похоже на другие технологии веб-разработки, такие как PHP , JSP и ASP . С ASP.NET Framework 2.0 компания Microsoft представила новую модель code-behind , которая позволяет статическому тексту оставаться на странице .aspx, в то время как динамический код переходит в файл .aspx.vb, .aspx.cs или .aspx.fs (в зависимости от используемого языка программирования). [7]<asp:textbox id="myid" runat="server">
<% -- dynamic code -- %>
Microsoft рекомендует работать с динамическим программным кодом, используя модель code-behind, которая помещает этот код в отдельный файл или в специально обозначенный тег скрипта. Файлы code-behind обычно имеют имена типа " MyPage.aspx.cs" или " MyPage.aspx.vb" , в то время как файл страницы — MyPage.aspx (то же имя файла, что и файл страницы (ASPX), но с конечным расширением, обозначающим язык страницы). Эта практика является автоматической в Visual Studio и других IDE , хотя пользователь может изменить имя страницы code-behind. Кроме того, в формате веб-приложения pagename.aspx.cs является частичным классом, который связан с файлом pagename.designer.cs. Файл конструктора — это файл, который автоматически генерируется из страницы ASPX и позволяет программисту ссылаться на компоненты на странице ASPX из страницы с выделенным кодом без необходимости объявлять их вручную, как это было необходимо в версиях ASP.NET до версии 2. [8] При использовании этого стиля программирования разработчик пишет код для реагирования на различные события, такие как загрузка страницы или нажатие элемента управления, а не выполняет процедурный просмотр документа.
Модель code-behind в ASP.NET знаменует собой отход от классического ASP, поскольку она поощряет разработчиков создавать приложения с учетом разделения представления и контента . Теоретически это позволило бы веб-дизайнеру, например, сосредоточиться на разметке дизайна с меньшим потенциалом для нарушения программного кода, который им управляет. Это похоже на разделение контроллера и представления в фреймворках модель–представление–контроллер (MVC).
Директива — это специальная инструкция о том, как ASP.NET должен обрабатывать страницу. [9] Наиболее распространенной директивой является , которая может указывать множество атрибутов, используемых анализатором и компилятором страниц ASP.NET.<%@ Page %>
Пользовательские элементы управления представляют собой инкапсуляции разделов страниц, которые зарегистрированы и используются в качестве элементов управления в ASP.NET.
Программисты также могут создавать пользовательские элементы управления для приложений ASP.NET. В отличие от пользовательских элементов управления, эти элементы управления не имеют файла разметки ASCX, а весь их код скомпилирован в файл библиотеки динамической компоновки (DLL) . Такие пользовательские элементы управления могут использоваться в нескольких веб-приложениях и проектах Visual Studio 2013 .
.NET использует технику рендеринга "посещенных композитов". Во время компиляции файл шаблона (.aspx) компилируется в код инициализации, который создает дерево элементов управления (композит), представляющее исходный шаблон. Буквальный текст помещается в экземпляры класса элементов управления Literal, а серверные элементы управления представлены экземплярами определенного класса элементов управления. Код инициализации объединяется с кодом, написанным пользователем (обычно путем сборки нескольких частичных классов), и в результате получается класс, специфичный для страницы. Страница также является корнем дерева элементов управления.
Фактические запросы к странице обрабатываются в несколько этапов. Во-первых, во время этапов инициализации создается экземпляр класса страницы и выполняется код инициализации. Это создает начальное дерево элементов управления, которое теперь обычно обрабатывается методами страницы на следующих этапах. Поскольку каждый узел в дереве является элементом управления, представленным как экземпляр класса, код может изменять структуру дерева, а также управлять свойствами/методами отдельных узлов. Наконец, во время этапа рендеринга посетитель посещает каждый узел в дереве, запрашивая каждый узел отобразить себя с помощью методов посетителя. Полученный вывод HTML отправляется клиенту.
После обработки запроса экземпляр класса страницы отбрасывается, а вместе с ним и все дерево управления. Это является источником путаницы среди начинающих программистов ASP.NET, которые полагаются на члены экземпляра класса, которые теряются с каждым циклом запроса/ответа страницы.
Приложения ASP.NET размещаются на веб-сервере и к ним осуществляется доступ с помощью протокола HTTP без сохранения состояния . Таким образом, если приложение использует взаимодействие с сохранением состояния, оно должно реализовать управление состоянием самостоятельно. ASP.NET предоставляет различные функции для управления состоянием. Концептуально Microsoft рассматривает «состояние» как состояние GUI . Проблемы могут возникнуть, если приложение должно отслеживать «состояние данных»; например, конечный автомат , который может находиться в переходном состоянии между запросами ( ленивая оценка ) или требует много времени для инициализации. Управление состоянием на страницах ASP.NET с аутентификацией может затруднить или сделать невозможным веб-скрапинг .
Состояние приложения удерживается коллекцией общих пользовательских переменных. Они устанавливаются и инициализируются, когда Application_OnStart
событие срабатывает при загрузке первого экземпляра приложения, и доступны до выхода последнего экземпляра. Доступ к переменным состояния приложения осуществляется с помощью коллекции Applications
, которая предоставляет оболочку для состояния приложения. Переменные состояния приложения идентифицируются по имени. [10] Приложение — это управление состоянием.
Состояние сеанса на стороне сервера хранится в коллекции пользовательских переменных сеанса, которые сохраняются в течение сеанса пользователя. Эти переменные, доступ к которым осуществляется с помощью Session
коллекции, уникальны для каждого экземпляра сеанса. Переменные могут быть настроены на автоматическое уничтожение после определенного времени бездействия, даже если сеанс не заканчивается. Клиентский сеанс пользователя поддерживается либо файлом cookie , либо кодированием идентификатора сеанса в самом URL. [10]
ASP.NET поддерживает три режима сохранения переменных сеанса на стороне сервера: [10]
Состояние сеанса ASP.NET позволяет вам сохранять и извлекать значения для пользователя, когда пользователь перемещается по страницам ASP.NET в веб-приложении. HTTP — это протокол без сохранения состояния. Это означает, что веб-сервер обрабатывает каждый HTTP-запрос на страницу как независимый запрос. Сервер не сохраняет никаких сведений о значениях переменных, которые использовались во время предыдущих запросов. Состояние сеанса ASP.NET идентифицирует запросы из одного и того же браузера в течение ограниченного временного окна как сеанс и предоставляет способ сохранения значений переменных на протяжении этого сеанса. По умолчанию состояние сеанса ASP.NET включено для всех приложений ASP.NET.
Альтернативы состоянию сеанса включают следующее:
Состояние просмотра относится к механизму управления состоянием на уровне страницы, используемому HTML-страницами, создаваемыми приложениями ASP.NET, для поддержания состояния элементов управления и виджетов веб-форм . Состояние элементов управления кодируется и отправляется на сервер при каждой отправке формы в скрытом поле, известном как __VIEWSTATE
. Сервер отправляет обратно переменную, так что при повторном отображении страницы элементы управления отображаются в своем последнем состоянии. На стороне сервера приложение может изменить состояние просмотра, если обработка требует изменения состояния любого элемента управления. Состояния отдельных элементов управления декодируются на сервере и доступны для использования на страницах ASP.NET с использованием коллекции ViewState
. [11]
Основное применение этого — сохранение информации формы между постбэками. Состояние просмотра включено по умолчанию и обычно сериализует данные в каждом элементе управления на странице независимо от того, используется ли он фактически во время постбэка. Однако это поведение можно (и нужно) изменить, поскольку состояние просмотра можно отключить на уровне элемента управления, страницы или сервера.
Разработчикам следует быть осторожными при хранении конфиденциальной или частной информации в состоянии просмотра страницы или элемента управления, поскольку строка Base64, содержащая данные состояния просмотра, может быть легко десериализована. По умолчанию состояние просмотра не шифрует значение __VIEWSTATE
. Шифрование может быть включено на уровне сервера (и на уровне сервера), что позволяет поддерживать определенный уровень безопасности. [12]
ASP.NET предлагает объект "Кэш", который является общим для всего приложения и может также использоваться для хранения различных объектов. Объект "Кэш" хранит данные только в течение определенного периода времени.
Другими средствами управления состоянием, поддерживаемыми ASP.NET , являются файлы cookie , кэширование и строка запроса .
При первом выпуске ASP.NET не имел шаблонизатора . Поскольку .NET Framework является объектно-ориентированным и допускает наследование , многие разработчики определяли новый базовый класс, который наследуется от " System.Web.UI.Page
", писали там методы , которые визуализируют HTML, а затем заставляли страницы в своем приложении наследоваться от этого нового класса. Хотя это позволяет повторно использовать общие элементы на сайте, это добавляет сложности и смешивает исходный код с разметкой . Кроме того, этот метод можно визуально протестировать только при запуске приложения, а не во время его проектирования. Другие разработчики использовали включаемые файлы и другие приемы, чтобы избежать необходимости реализовывать одну и ту же навигацию и другие элементы на каждой странице.
ASP.NET 2.0 представил концепцию мастер-страниц , которые позволяют разрабатывать страницы на основе шаблонов . Веб-приложение может иметь одну или несколько мастер-страниц, которые, начиная с ASP.NET 2.0, могут быть вложенными. [13] Мастер-шаблоны имеют элементы управления-заполнители, называемые ContentPlaceHolders, для обозначения того, куда следует помещать динамическое содержимое, а также HTML и JavaScript, общие для дочерних страниц.
Дочерние страницы используют те элементы управления ContentPlaceHolder, которые должны быть сопоставлены с заполнителем главной страницы, который заполняет страница содержимого. Остальная часть страницы определяется общими частями главной страницы, во многом как слияние почты в текстовом процессоре . Вся разметка и элементы управления сервера на странице содержимого должны быть размещены в элементе управления ContentPlaceHolder.
При запросе страницы содержимого ASP.NET объединяет вывод страницы содержимого с выводом главной страницы и отправляет вывод пользователю.
Главная страница остается полностью доступной для страницы контента. Это означает, что страница контента может по-прежнему манипулировать заголовками, изменять заголовок, настраивать кэширование и т. д. Если главная страница предоставляет публичные свойства или методы (например, для установки уведомлений об авторских правах), страница контента также может их использовать.
Другие расширения файлов , связанные с различными версиями ASP.NET, включают:
Расширение | Представлено в версии | Описание |
---|---|---|
асакс | 1.0 | Это глобальный файл приложения. Вы можете использовать этот файл для определения глобальных переменных (переменных, к которым можно получить доступ с любой веб-страницы в веб-приложении). Он в основном используется для определения общего события приложения, связанного с объектом приложения и сеанса. Global.asax, используется для логики уровня приложения [14] |
ascx | 1.0 | Пользовательский контроль, используемый для логики файлов пользовательского контроля [15] |
ашх | 1.0 | Пользовательские обработчики HTTP не имеют пользовательского интерфейса. |
asmx | 1.0 | Страницы веб-сервисов . Начиная с версии 2.0 страница Code behind файла asmx помещается в папку app_code. |
aspx | 1.0 | Страница ASP.NET Web Forms, которая может содержать веб-элементы управления, а также логику представления и бизнес-логику. http://msdn.microsoft.com/en-us/library/2wawkw1c.aspx |
ахд | 1.0 | При включении в web.config запрос trace.axd выводит трассировку на уровне приложения . Также используется для специального обработчика webresource.axd, который позволяет разработчикам элементов управления/компонентов упаковывать компонент/элемент управления вместе с изображениями, скриптом, css и т. д. для развертывания в одном файле («сборка») |
браузер | 2.0 | Файлы возможностей браузера, хранящиеся в формате XML ; введены в версии 2.0. ASP.NET 2 включает многие из них по умолчанию для поддержки распространенных веб-браузеров. Они определяют, какие возможности есть у браузеров, так что ASP.NET 2 может автоматически настраивать и оптимизировать свой вывод соответствующим образом. Специальные файлы .browser доступны для бесплатной загрузки для обработки, например, W3C Validator, так что он правильно отображает страницы, соответствующие стандартам, как соответствующие стандартам. Заменяет сложный в использовании раздел BrowserCaps, который был в machine.config и мог быть переопределен в web.config в ASP.NET 1.x. |
конфигурация | 1.0 | web.config — единственный файл в определенном веб-приложении, который использует это расширение по умолчанию (machine.config аналогичным образом влияет на весь веб-сервер и все приложения на нем), однако ASP.NET предоставляет возможности для создания и использования других файлов конфигурации. Они хранятся в формате XML . |
cs/vb/fs | 1.0 | Файлы кода (cs обозначает C#, vb обозначает Visual Basic, fs обозначает F#). Файлы кода (см. выше) в основном имеют расширение " .aspx.cs " или " .aspx.vb " для двух наиболее распространенных языков. Другие файлы кода (часто содержащие общие "библиотечные" классы) также могут существовать в веб-папках с расширением cs/vb. В ASP.NET 2 они должны быть помещены в папку App_Code, где они динамически компилируются и становятся доступными для всего приложения. |
cshtml | 4.1 | Представления (смешанные C# и HTML с использованием синтаксиса Razor ) |
dbml | 3.5 | Файл классов данных LINQ to SQL |
edmx | 3.5 | Модель ADO.NET Entity Framework |
владелец | 2.0 | Файл главной страницы. Имя файла по умолчанию Master1.master |
resx | 1.0 | Файлы ресурсов для интернационализации и локализации . Файлы ресурсов могут быть глобальными (например, сообщения) или локальными , что означает специфичными для одного файла aspx или ascx. |
карта сайта | 2.0 | Файлы конфигурации Sitemap. Имя файла по умолчанию — web.sitemap |
кожа | 2.0 | Файлы тем оформления. |
свк | 3.0 | Файл службы Windows Communication Foundation |
vbhtml | 4.1 | Представления (смешанные VB и HTML с использованием синтаксиса Razor ) |
В целом структура каталогов ASP.NET может определяться предпочтениями разработчика. За исключением нескольких зарезервированных имен каталогов, сайт может охватывать любое количество каталогов. Структура обычно отражается непосредственно в URL-адресах. Хотя ASP.NET предоставляет средства для перехвата запроса в любой момент во время обработки, разработчик не обязан направлять запросы через центральное приложение или фронт-контроллер.
Специальные имена каталогов (начиная с ASP.NET 2.0): [16]
ASP.NET нацелен на повышение производительности по сравнению с другими технологиями на основе скриптов (включая Classic ASP) путем компиляции серверного кода при первом использовании в один или несколько файлов DLL на веб-сервере . Эти файлы или сборки DLL содержат Microsoft Intermediate Language (MSIL) для запуска в среде выполнения CLR ; это обеспечивает повышение производительности по сравнению с чистыми скриптовыми языками и похоже на подход, используемый в Python, и не отличается от JavaServer Pages . [18] Эта компиляция происходит автоматически при первом запросе страницы (что означает, что разработчику не нужно выполнять отдельный шаг компиляции для страниц).
Эта функция обеспечивает простоту разработки, предлагаемую скриптовыми языками, с преимуществами производительности скомпилированного двоичного файла. Однако компиляция может вызвать заметную, но короткую задержку для пользователя, когда недавно отредактированная страница впервые запрашивается с веб-сервера, но не снова, если запрошенная страница не обновится дальше.
ASPX и другие файлы ресурсов размещаются на виртуальном хосте на сервере Internet Information Services (или других совместимых серверах ASP.NET; см. Другие реализации ниже). Когда клиент впервые запрашивает страницу, .NET Framework анализирует и компилирует файл(ы) в сборку .NET и отправляет ответ; последующие запросы обслуживаются из файлов DLL. По умолчанию ASP.NET компилирует весь сайт пакетами по 1000 файлов при первом запросе. Если задержка компиляции вызывает проблемы, можно изменить размер пакета или стратегию компиляции.
Разработчики также могут выбрать предварительную компиляцию своих файлов "codebehind" перед развертыванием, используя Microsoft Visual Studio, устраняя необходимость в компиляции "точно в срок" в производственной среде. [19] Это также устраняет необходимость иметь исходный код на веб-сервере. Он также поддерживает предварительную компиляцию текста.
ASP.NET WebForms упрощает разработчикам переход от разработки приложений Windows к веб-разработке, предлагая возможность создавать страницы, состоящие из элементов управления, похожих на пользовательский интерфейс Windows . Веб-элемент управления, такой как кнопка или метка , функционирует во многом так же, как и его аналоги Windows: код может назначать его свойства и реагировать на его события. Элементы управления знают, как визуализировать себя: в то время как элементы управления Windows рисуют себя на экране, веб-элементы управления создают сегменты HTML и JavaScript , которые формируют части результирующей страницы, отправляемой в браузер конечного пользователя.
ASP.NET WebForms поощряет программиста разрабатывать приложения с использованием событийно-управляемой модели GUI , а не в обычных средах веб- скриптинга , таких как ASP и PHP . Фреймворк объединяет существующие технологии, такие как JavaScript, с внутренними компонентами, такими как « ViewState », чтобы привнести постоянное (межзапросное) состояние в изначально не имеющую состояния веб-среду.
Другие отличия по сравнению с классическим ASP :
<%@ Page Language = "C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat= "server" > protected void Page_Load ( object sender , EventArgs e ) { Label1 . Text = DateTime . Now . ToLongDateString (); } </script> <html xmlns= "http://www.w3.org/1999/xhtml" > <head runat= "server" > <title> Пример страницы </title> </head> <body> <form id= "form1" runat= " server" > <div> Текущее время : <asp:Label runat= "server" id= "Label1" /> </div> </form> </body> </html>
[20]