Cамоучитель по VB.NET

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



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

Ниже приведен код предыдущего примера, сгенерированный для клиентского броузера 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 может восстановить страницу и ее состояние. Механизм шифрования представляет собой особую разновидность сериализации; чтобы отключить сохранение состояния, задайте свойству ЕпаЫе-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 имеется свойство Sessi on, возвращающее объект с информацией о текущей странице. Объект Session можно рассматривать как своего рода «cynepcookie» с возможностью сохранения данных по ключу (как в хэш-таблицах). Пример:

Session("user name") = TextBox1.Text

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

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



Содержание раздела