Программирование >>  Программирование с использованием ajax 

1 ... 201 202 203 [ 204 ] 205 206 207 ... 396


Описание полученных результатов

Элементы управления проверкой создают код JavaScript на стороне клиента для проверки вводимых данных на стороне клиента и код на стороне сервера для проверки введенных данных на сервере. Код JavaScript можно отключить, присвоив свойству EnableClientScript значение false. Вместо того чтобы изменять свойство в каждом элементе управления проверкой, код JavaScript можно отключить, присвоив свойству ClientTarget класс Page.

В зависимости от типа клиента, элементы управления ASP.NET могут возвращать JavaScript-код клиенту. Это поведение зависит от значения свойства ClientTarget. По умолчанию этому свойству присваивается значение automatic , в соответствии с которым, в зависимости от функций Web-браузера, код сценариев либо возвращается, либо нет. Если свойство ClientTarget имеет значение downlevel , код сценариев не возвращается клиентам, а если оно имеет значение uplevel , то код сценариев будет возвращаться всегда. Установить значение свойства ClientTarget можно внутри метода Page Load () класса Page:

protected void Page Load(object sender, EventArgs e)

ClientTarget = downlevel

Управление состоянием

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

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

Таблица 19.5. Способы управления состоянием

Тип состояния

Ресурс:

клиент или сервер

Время действия

Состояние представления (ViewState)

Клиент

Только в рамках одной страницы

Cookie-набор

Клиент

Временные cookie-наборы удаляются при закрытии браузера; постоянные cookie-наборы хранятся на диске клиентской системы

Сеанс (Session)

Сервер

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

Приложение (Application)

Сервер

Состояние приложения разделяется между всеми клиентами. Это состояние остается действительным до момента перезагрузки сервера

Кэш (Cache)

Сервер

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



Теперь давайте ознакомимся с этими способами более подробно.

Управление состоянием на стороне клиента

в этом разделе мы поговорим об управлении состоянием на стороне клиента, рассмотрев два способа: ViewState и cookie-наборы.

ViewState

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

Недостатком использования ViewState является то, что данные всегда передаются от сервера клиенту и наоборот, в результате чего увеличивается объем передаваемых данных по сети. Чтобы сократить объем сетевого трафика, ViewState можно отключить. Чтобы сделать это для всех элементов управления на странице, нужно присвоить свойству EnableViewState значение false посредством директивы Page:

<%@ Page Language= C# AutoEventWireUp= true CodeFile= Default.aspx.cs Inherits= Default EnableViewState= false %>

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

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

ViewState[ mydata ] = my data ;

Прочитать предварительно сохраненное значение ViewState можно следующим образом:

string mydata = (string)ViewState[ mydata ];

В HTML-коде, который посылается клиенту, вы можете видеть значение ViewState для всей страницы внутри скрытого поля:

<input type= hidden name= VIEWSTATE

value= /wEPDwUKLTU4NzY5NTcwNw8WAh4HbXlzdGF0ZQUFbXl2YWwWAgIDD2QWAg IFDw8WAh4EVGV4dAUFbX12YWxkZGTCdCywUOcAW97aKpcjtltzJ7ByUA== />

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

Информация ViewState сохраняется только внутри страницы. Если состояние должно быть действительным для различных страниц, то для хранения состояния на стороне клиента следует использовать cookie-наборы.



СооМе-наборы

Cookie-набор определяется в заголовке HTTP. Класс HttpResponse используется для отправки cookie-набора клиенту. Response - это свойство класса Page, которое возвращает объект типа HttpResponse. Класс HttpResponse определяет свойство Cookies, которое возвращает HttpCookieCollection. Посредством HttpCookieCollection можно возвращать клиенту множество cookie-наборов.

Следующий пример кода показывает, как можно отправить cookie-набор клиенту. Сначала создается экземпляр объекта HttpCookie. В конструкторе этого класса задается имя cookie-набора - в данном случае это mycookie. Класс HttpCookie имеет свойство, позволяющее добавлять множество значений cookie-наборов. Если необходимо вернуть только одно значение cookie-набора, вы можете использовать свойство Value. Однако если вы планируете отправлять множество значений cookie-наборов, лучше добавить значения в один cookie-набор, чем использовать множество cookie-наборов:

string myval = myval ;

HttpCookie cookie = new HttpCookie( mycookie ); cookie.Values.Add( mystate , myval); Response.Cookies.Add(cookie);

Cookie-наборы могут быть временными и действительными внутри сеанса браузера или же храниться на диске клиента. Чтобы сделать cookie-набор постоянным, свойству Expires необходимо присвоить объект HttpCookie. Посредством свойства Expires определяется срок окончания действия cookie-набора; здесь было выбрано три месяца с момента текущей даты.

Несмотря на то что можно указать конкретную дату, нет гарантии того, что cookie-набор будет храниться вплоть до этой даты. Пользователь может удалить cookie-набор, да и сам браузер тоже может удалять cookie-наборы, если на локальном компьютере их хранится слишком много. Браузер имеет ограничение в 20 cookie-наборов для одного сервера и 300 cookie-наборов для всех серверов. Когда этот лимит будет исчерпан, неиспользуемые в течение некоторого времени cookie-наборы будут удалены.

HttpCookie cookie = new HttpCookie( mycookie ); cookie.Values.Add( mystate , myval ); cookie.Expires = DateTixne.Now.AddMonths (3) ;

Response.Cookies.Add(cookie) ;

Когда клиент запрашивает страницу на сервере, и cookie-набор для данного сервера доступен на стороне клиента, cookie-набор отправляется на сервер как часть HTTP-запроса. Чтение cookie-наборов на странице ASP.NET может быть выполнено посредством доступа к коллекции cookies в объекте HttpRequest.

Подобно НТТР-отклику, класс Page имеет свойство Request, которое возвращает объект типа HttpRequest.

Свойство Cookies возвращает коллекцию HttpCookieCollection, которую теперь можно применять для чтения cookie-наборов, посланных клиентом. Доступ к cookie-набору может быть осуществлен по его имени с помощью индексатора, а для получения значения из cookie-набора может использоваться свойство Values объекта HttpCookie:

HttpCookie cookie = Request.Cookies[ mycookie ]; string myval = cookie.Values[ mystate ];

ASP.NET облегчает работу с cookie-наборами, однако вы должны знать об ограничениях при их использовании. Напомним, что браузер принимает только 20 cookie-наборов от одного сервера и 800 cookie-наборов от всех серверов. Существует также ограничение на размер cookie-файла: он не должен превышать 4 Кбайт. Эти ограни-



1 ... 201 202 203 [ 204 ] 205 206 207 ... 396

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика