Что передается клиенту?
Что передается клиенту?
Сценарии 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.