2014-09-18 2 views
0

Я знаю, что этот вопрос упрощен. Я искал Google, пытаясь обернуть голову переменными в веб-разработке (в частности, ASP.net), но я думаю, я просто не знаю, с чего начать процесс обучения.Сохранение переменных в Asp.net

Исходя из разработки настольных приложений, я знаю, что переменная, если она определена в правильной области, будет сохраняться до тех пор, пока она больше не понадобится (завершение работы приложения, завершение работы метода и т. Д.). Однако, в ASP.NET, что происходит с переменными?

Например, предположим, что пользователь А переходит на веб-форму, код позади выглядит следующим образом:

protected void Page_Load(object sender, EventArgs e) { 
int a = 1; 
} 

, когда это «» больше не доступен? Если пользователь отправляет форму, могу ли я использовать «а», зная, что она будет сохранена с последней загрузки страницы? Если да, то до тех пор, пока «а» не сохранится? Если нет, как я могу сделать это упорством?

Уверен, что есть что почитать по этому предмету, с чего начать?

Заранее благодарен.

ответ

1

Он будет сохраняться до тех пор, пока Page_Load не закончится так же, как любая другая нормальная переменная, объявленная в функции.

Если вы хотите, чтобы переменная была доступна в любое время, пока страница открыта, вы захотите объявить вне любых функций, находящихся в начале класса Page.

protected int a = 1 

protected void Page_Load(object sender, EventArgs e) { 
    int b = a //b now equals 1 
    a = 2; //a now equals 2 and will be referenced as so in any other function. 
} 

Теперь, если вы обновите страницу, она будет сброшена на 1, а затем снова будет установлена ​​на 2. Если вы используете пользовательский ввод для изменения значения a, тогда вы захотите сохранить a в сеансе, когда действие пользователя должно изменить его значение.

Пример:

protected function UserClicksAButton() 
{ 
    a = Convert.ToInt32(SomeTextBox.Text); 
    Session["A"] = a; 
} 

Тогда при загрузке страницы вы можете проверить, если сессия [ «A»] является недействительным, если это не то установить a = (int)Session["A"];

Или вы можете использовать глобальные переменные, которые доступный на сайте: вы можете узнать больше о глобальных переменных по адресу: http://www.dotnetperls.com/global-variables-aspnet

+0

Привет, спасибо большое. Хорошо, если я объявлю его снаружи, до когда он будет доступен? Пока пользователь не перейдет на другую страницу или пока он не покинет сервер полностью? Кроме того, если я объявлю его там, будет ли переменная доступна для другого пользователя? Или каждый пользователь имеет свою собственную переменную? – bob

+0

Ни то, ни другое доступно только на собственной странице. Если вы хотите получить доступ к A с другой страницы, вы можете либо сохранить в ней сеанс (см. Мой обновленный ответ), либо использовать глобальные переменные: http://www.dotnetperls.com/global-variables-aspnet –

+0

Также @bob каждый пользователь имеет свои собственные переменные, они не разделяются между пользователями - это вызовет всевозможные проблемы! ;) –

1

Это работает практически так же, как и любое приложение, помните, что код, а также страница скомпилированы до класса, а затем выполнены.

Единственное исключение - если вы определяете статические переменные, в этом случае они будут жить до тех пор, пока домен приложения не переработает, что может быть сделано по ряду причин, поэтому на это вы не должны полагаться.

Если вам нужно сохранить значения между запросами, вы должны использовать встроенные объекты Session и Application для хранения значений.

1

Исходя из разработки настольных приложений ...

ASP.NET ничем не отличается. Вы все еще используете методы, классы, объекты и т. Д.не

protected void Page_Load(object sender, EventArgs e) { 
    int a = 1; 
} 

, когда это "" больше не доступны?

Вы находитесь в рамках метода. a выйдет из сферы, когда поток управления выходит из метода. Это точно такие же как настольные приложения.

Если значение a является значением члена класса, оно останется в памяти до тех пор, пока экземпляр объекта находится в памяти. Если это статическое значение, оно останется в памяти до тех пор, пока загружается статический контекст. И так далее.

Одна вещь, которая часто удивляет людей, новых для ASP.NET (у которых у вас может быть , для чего требуется), заключается в том, что объекты Page не остаются в памяти между запросами. Поэтому, если вы установите значение уровня класса при загрузке страницы, в следующий раз, когда на эту страницу придет запрос (например, нажатие кнопки для вызова обратной записи), это значение было потеряно. Если вы думаете об этом, становится очевидным, почему это происходит. Представьте себе требования к памяти для любой значимой системы, если все страницы, необходимые для , остаются в памяти в течение длительных периодов времени.

Вместо этого веб-запросы по сути являются апатридами. Объекты сохраняют состояние, поэтому система без состояния не собирается поддерживать объекты. Поэтому, если вы хотите сохранить значение для нескольких запросов, вам необходимо сохранить его где-то вне объекта. У вас есть много вариантов, где сохраняются состояние:

  • Страница значения
  • Печенье
  • Session
  • Статические значения
  • базы данных (или другого внешнего упорства)

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

+0

Не забудьте ViewState. – Tim

+1

@Tim: Это первый в моем списке ... – David