Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 662
Эндрю Троелсен
Для создания членов-данных, которые должны быть доступны всем активным сеансам, нужно создать множество пар имен и значений. В большинстве случаев наиболее подходящим для этого местом является обработчик события Application_Start() типа, производного от HttpApplication, например:
void Application_Start(Object sender, EventArgs e) {
// Установка некоторых переменных приложения.
Application["SalesPersonOfTheMonth"] = "Chucky";
Application["CurrentCarOnSale"] = "Colt";
Application["MostPopularColorOnLot"] = "черный";
}
В течение всего времени существования Web-приложения (т.е. пока Web-приложение не будет закрыто вручную или пока не истечет время ожидания последнего пользователя) любой пользователь (на любой странице) при необходимости может получить доступ к этим значениям. Предположим, что у вас есть страница, которая по щелчку мыши должна отображать в поле Label информацию об автомобиле, предлагаемом со скидкой в данный момент.
protected void btnShowCarDiscunt_Click(object Sender, EventArgs e) {
// Возвращаемый System.Object следует преобразовать
// в System.String!
lblCurrCarOnSale.Text = (string)Application["CurrentCarOnSale"];
}
Как и в случае свойства ViewState, обратите внимание на то, что вы должны преобразовать значение, возвращаемое типом HttpApplicationState, в подходящий тип. Поскольку тип HttpApplicationState может содержать
Для примера использования этой возможности создайте новое Web-приложение ASP.NET с названием AppState. Предположим, что требуется поддерживать три текущие переменные приложения в рамках строго типизованного объекта с именем CarLotlInfo.
public class CarLotInfo {
public CarLotInfo(string s, string c, string m) {
salesPersonOfTheMonth = s;
currentCarOnSale = c;
mostPopularColorOnLot = m;
}
// Открыты для простоты доступа.
public string salesPersonOfTheMonth;
public string currentCarOnSale;
public string mostPopularColorOnLot;
}
С этим вспомогательным классом вы можете сначала изменить обработчик события Application_Start() так, как предлагается ниже:
protected void Application_Start(Object sender, EventArgs e)
// Размещение пользовательского объекта
// в секторе данных приложения.
Application["CarSiteInfo"] = new CarLotInfo("Chucky", "Colt" "черный");
}
а затем получить доступ к соответствующей информации с помощью открытых полей данных в обработчике событий сервера.
protected void btnShowAppVariables_Click(object sender, EventArgs e) {
CarLotInfo appVars = ((CarLotInfo)Application["CarSiteInfo"]);
string appState = string.Format("‹li›Предлагаемая машина: [0]‹/li›", appVars.currentCarOnSale);
appState += string.Format("‹li›Наиболее популярный цвет: {0}‹/li›", appVars.mostPopularColorOnLot);
appState += string.Format ("‹li›Наиболее успешный продавец: {0}‹/li›", appVars.salesPersonOfTheMonth);
lblAppVariables.Text = appState;
}
Открыв сейчас эту страницу, вы обнаружите, что в поле типа Label страницы отображаются строки каждой из переменных приложения.