Способы хранения состояния web приложения ASP.NET.
Проблема:
§ HTTP это протокол без сохранения состояния (stateless).
§ После того, как клиент отсоединится от сервера ASP.Net уничтожает объекты, которые были созданы для страницы.
§ Достоинство - гарантируется обработку web приложением тысяч одновременных запросов без ошибок на нехватку недостатку оперативной памяти.
§ Недостаток - код приложения должен использовать специальные методы сохранения информации между web запросами и ее восстановления при необходимости.
§ ASP.Net поддерживает различные способы управления состоянием. Выбор правильного способа зависит от:
• Какие данные требуется хранить;
• Длительности времени хранения;
• Масштаб использования данных (только одним пользователем или разными пользователями).
• Разные способы хранения состояния являются взаимодополняющими, т.е. можно использовать их комбинацию в одном web приложении.
Состояние Web-приложения
§ В Web-приложении есть данные, которые описывают состояние сеанса работы пользователя с приложением:
• Данные, которые хранятся между множеством вызовов (обработка событий) одной и той же страницы;
• Данные, которые должны передаваться между страницами, которые вызывает пользователь в ходе сеанса работы
§ Данные приложения используются для разных целей:
• Для обеспечения персонализации пользователя
• Хранения информации о пользователе
• Для формирования отчета об использовании страниц
|
|
§ Множество значений данных приложения задает состояние приложения, которое должно сохраняться в ходе сеанса работы пользователя.
Преимущества разных способов хранения состояния:
§ Преимущества хранения данных на стороне клиента
• Лучшая масштабируемость – на web-сервере не используется память. При большом количестве пользователей могут возникать проблемы с памятью на сервере.
• Поддержка множества web-серверов – можно распределять входящие запросы между множеством одновременно работающих серверов (web-ферма).
§ Преимущества хранения данных на стороне сервера
• Более высокий уровень секретности
• Уменьшение количества передаваемых данных
Способы хранения состояния web-приложений
1. ViewState – хранение и передача данных в скрытом поле страницы
2. QueryString – хранение и передача данных в строке запроса
3. CustomCookies – хранение и передача данных в куки элементах.
4. SessionState – хранение данных в состоянии сессии.
5. ApplicationState – хранение данных в состоянии приложения.
6. Профили (Profiles) – хранение данных в описании профиля пользователя.
7. Кэш (Caching) – хранение данных в кэше.
Связывание элементов управления Web Form с источниками данных. Способы связывания. Примеры.
|
|
Data Binding это функциональность, позволяющая связать источники данных с ЭУ. В результате ЭУ будут отображать требуемые данные.
Это декларативный процесс, а не результат программирования.
Когда свойству DataSource задается ссылка на data object, то создается логическая связь между ЭУ и data object, который содержит данные для передачи.
Для выполнения самого процесса передачи данных нужен метод ЭУ DataBinding(), который пробегает по источнику данных, извлекает данные и передает их странице.
Связывание с данными (Databinding):
• Предоставляет единый, простой, но мощный способ заполнения WebForm данными
– Позволяет ясное отделение кода от интерфейса пользователя (UI)
• Поддерживает связывание с любым источником данных
– Свойства, выражения, вызовы методов
– Коллекции (Array, Hashtable, etc.)
– DataSet, DataTable, DataView, DataReader
– XML
Связывание с данными:
• Можно указать выражение связывания
• При вызове метода ЭУ DataBind, выражение вычисляется и полученное значение заносится в ЭУ:
– DataBind для одного ЭУ (и его дочерних ЭУ)
– Page.DataBind для связывания всех ЭУ на странице
• Работает со скалярными ЭУ, например ЭУ, Label
• Работает со списками, например: DropDown, ListBox, и т.п.
• Позволяет использовать шаблоны.
|
|
Способы связывания:
§ Два способа связывания
• Связывание с одним значением, скалярное связывание (single-valuebinding)
› # выражения
› $ выражения
• Связывание с множеством значений, со списками данных (repeated-valuebinding)
Связывание с одним значением (Single-Value Binding):
ЭУ, которые поддерживают single-value binding, позволяют связать некоторые их свойства с databinding выражениями.
Эти выражения записываются в размеченную часть страницы .aspx (не в программном коде).
§ Выражения записываются в формате
<%# выражение_находится_здесь %>
§ Например, если есть переменная класса EmployeeName (public, private, protected), то можно записать
<%# EmployeeName %>
Правильные выражения для Single-Value Binding:
Содержанием выражений связывания могут быть только:
• значения свойств, полей класса и результаты работы методов;
• результат арифметического или символьного выражения
• И т.п.
Например
<%# GetUserName() %>
<%# 1 + (2 * 20) %>
<%# "John " + "Smith" %>
<%# Request.Browser.Browser %>
Пример:
<form id="form1" runat="server">
<asp:Image runat="server" ImageUrl='<%# FilePath %>' ID="Image1" />
<br />
<asp:Label runat="server" Text='<%# FilePath %>' ID="Label1" />
<br />
<asp:TextBox runat="server" Text='<%# GetFilePath() %>' ID="Textbox1" />
|
|
<br />
<asp:HyperLink runat="server" NavigateUrl='<%# LogoPath.Value %>'
Font-Bold="True" Text="Показатьизображение" ID="Hyperlink1" />
<br />
<input type="hidden" runat="server" id="LogoPath" value="myimg.jpg" name="LogoPath" />
<b><%# FilePath %></b>
<br />
<img src="<%# GetFilePath() %>" alt="<%# GetFilePath() %>" />
</form>
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Построить выражения привязки
this.DataBind();
}
protected string GetFilePath()
{
return "myimg.jpg";
}
protected string FilePath
{
get { return "myimg.jpg"; }
}
}
$ выражениясвязывания:
§ Имеют вид <%$ … %>
§ Выражения, записанные в <%$ … %> вычисляются, когда формируется ответ на запрос (рендеринг) с помощью “expression builder”.Такие выражения заменяются на строки.
§ Используются для получения заданных администратором значений из web.config файла
Например, если нужно получить значение, названное appName из раздела <appSettings> файла web.config, то нужно записать:
<asp:Literal Runat="server"
Text="<%$ AppSettings:appName %>" />
§ Пример: "<%$ AppSettings:appName %>"
§ Первая часть выражения (до :) это имя построителя выражения, которые должны быть зарегистрированы
• AppSettingsExpressionBuilder
• ResourceExpressionBuilder
• ConnectionStringsExpressionBuilder
§ Например:
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Northwind %>" ... />
Различие между # и $ связыванием:
§ Для $ выражений не нужно вызывать метод DataBind(), чтобы выполнить выражение. Оно всегда выполняется при рендеринге страницы.
§ В отличии от # выражений, $ выражения не могут вставляться в любое место страницы. Они могут быть записаны только в тэгах эл. управления для задания его свойств.
§ Если нужно показать значение $ выражения в виде обычного текста, то его нужно поместить в ЭУ Literal:
<asp:Literal Runat="server"
Text="<%$ AppSettings:appName %>" />
Дата добавления: 2018-05-02; просмотров: 773; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!