Иллюстрированный самоучитель по Visual Basic .NET

Что передается клиенту?

Сценарии ASP.NET программируются в обычном стиле VB.NET, однако в зависимости от типа клиентского браузера генерируется разный код HTML. Например, если клиент работает в последней версии Internet Explorer, в сгенерированном коде используются конструкции DHTML, а интервальная проверка осуществляется на стороне клиента. Но если в качестве браузера используется сотовый телефон с поддержкой WAP (Wireless Application Protocol), будет сгенерирован код WML (версия HTML для этой платформы), а все необходимые проверки будут выполняться сервером. И все это происходит автоматически, совершенно не требуя особых действий со стороны программиста! [Если, конечно, вы не займетесь разработкой нестандартных элементов для форм Web – в этом случае вам придется изрядно потрудиться. Элементы форм Web должны знать, какой код следует генерировать для каждой конкретной платформы.]

Ниже приведен код предыдущего примера, сгенерированный для клиентского браузера Internet Explorer, работающего в Windows XP.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML>
<HEAO>
<title></title>
<meta name="GENERATOR"content="Microsoft Visual Studio .NET 7.0">
<meta name="CODE_LANGUAGE"content="Visual Basic 7.0">
<meta name="vs_defaultClientScnpt"content="JavaScnpt">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intel1isense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form name="Forml" method="post" action="WebForml.aspx" id="Forml">
<input type="hidden" name="_VIEWSTATE" value="dDwxMDA3MzE2MzEy0zs+"/>
<input type="subm1t" name="Buttonl" value="Click me!" id="Buttonl"
style="height:67px;width:123px;Z-INDEX: 101: LEFT:311px:
POSITION:absolute;TOP:212px"/>
<span id="Labell"style="height:132px:width:631px:Z-INDEX:102:
LEFT:15px;POSITION:absolute:TOP:40px"></span>
</form>
</body>
</HTML>

Из выделенного фрагмента видно, что в сгенерированный для клиентской стороны HTML-код включена форма HTML с атрибутом post и скрытым полем _VIEWSTATE. Эти строки позволяют ASP.NET сохранять информацию состояния, не требуя специальных действий со стороны клиента. Скрытое поле _VIEWSTATE содержит зашифрованные данные, по которым ASP.NET может восстановить страницу и ее состояние. Механизм шифрования представляет собой особую разновидность сериализации; чтобы отключить сохранение состояния, задайте свойству Enable-ViewState значение False.

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

<form name="Forml" method="post" action="WebForml.aspx" id="Forml">
<input type="hidden" name="_VIEWSTATE"
value="dDwxMDA3MzE2MzEy03Q802w8aTwxPjs+
02w8dDw7bDxpPDM+Oz47bDxOPHA,
8cDxsPEZvbnRfU216ZTtUZXh0018hUOI7PjtsPFN5
c3RlbS5XZWIuVUkuV2Vi029udHJvbH
MuRm9udFVuaXQsIFN5c3RlbS5XZWIsIFZlcnNpb
249MS4wLjIOMTEuMCwgQ3VsdHVyZT
luZXVOcmFsLCBQdWJsaWNLZXlUb2tlbjliMDNmN
WY3ZjExZDUwYTNhPFgtT6FyZ2U+0
ldlbGNvbWUgdG8gQVNQLk5FVCBAOC8xOS8yMDAx
IDEyOjM20jAwIFBN02k8MTQwOT
47Pj47Pjs7Pjs+Pjs+Pjs+"/>

Хотя базовый файл .aspx, указанный в атрибуте тега <form>, остался прежним, скрытая переменная _VIEWSTATE изменилась весьма основательно. Фактически в этом поле сохранено полное состояние элементов HTML и данных формы. Одно из преимуществ этого подхода заключается в том, что программист избавляется от хлопот с сохранением состояния. Он просто задает свойству EnableViewState значение True и переходит к программированию логики страницы. С другой стороны, с каждой страницей приходится пересылать дополнительные данные. В большинстве случаев их объем относительно невелик, поэтому преимущества компенсируют недостатки.

Примечание
Элементы ввода (тег <input>) на стороне клиента всегда запоминают свое состояние даже после пересылки данных на сервер и обратно. ASP.NET не позволяет отключать автоматическое сохранение состояния для элементов ввода
.

Наконец, у каждой страницы .aspx имеется свойство Session, возвращающее объект с информацией о текущей странице. Объект Session можно рассматривать как своего рода "cynepcookie" с возможностью сохранения данных по ключу (как в хэш-таблицах). Пример:

Session("user name") = TextBox1.Text

Содержимое текстового поля TextBoxl сохраняется в объекте Session, а при обращениях к – нему используется строка "user name".

Примечание
Нехватка места не позволяет развивать эту тему, однако мы хотим обратить внимание читателя на одно обстоятельство. В особо сложных ситуациях, когда сохранение всех данных в объекте Session, находящемся в памяти сервера, нежелательно, информация сохраняется в базе данных SQL Server. Более того, если сайт обслуживается web-комплексом, вы даже можете указать, на каком сервере должна храниться эта информация! Эти две особенности значительно улучшают масштабируемость приложений ASP.NET
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.