У меня есть одна страница asp.net со следующей и обратной кнопкой и переменной "i", каждый раз, когда я нажимаю кнопку "Далее" или "Назад", переменная "i" будет увеличиваться или уменьшаться на 1. Так как я могу объявить переменную i? Я не хочу использовать "public static int i". Должен ли я использовать сеанс или viewstate? Есть ли лучшие способы сделать это?
Состояние View State
- это состояние страницы и всех ее элементов управления. Он автоматически поддерживается через сообщения в структуре ASP.Net.
Каждый раз, когда страница отправляется назад, она, по сути, начинается с нуля - все, что инициализируется до 0, например, снова будет нулевым. Это связано с тем, что сервер ничего не знает о последнем запуске страницы - все, что он знает, - это щелчок кнопки, которая представляет форму для этого.
Когда страница отправляется обратно клиенту, изменения в свойствах страницы и ее элементов управления определяются и сохраняются в значении скрытого поля ввода с именем _VIEWSTATE. Когда страница снова отправляется назад, поле _VIEWSTATE
отправляется на сервер с HTTP-запросом.
AS при добавлении переменных в ASP.net при нажатии кнопки
Если вам нужно сохранить значение через обратную передачу, стандартным методом является использование
ViewState
:Public Property MyCounter() As Integer Get Dim val As Object = ViewState("MyCounter") Return If(val IsNot Nothing, CInt(val), 0) End Get Set(ByVal value As Integer) ViewState("MyCounter") = value End Set End Property
Также можно использовать Session, который будет сохранять ценность на всех страницах и запросы на срок службы пользовательской сессии. Для этого вы можете использовать тот же пример выше, заменив ViewState на Session.
Вы можете использовать ViewState
следующим образом, если вы хотите использовать его на одной странице
private int i
{
get
{
return ViewState["i"] != null ? (int)ViewState["i"] : 0;
}
set
{
ViewState["i"] = value;
}
}
и использовать его
protected void next_Click(object sender, EventArgs e)
{
i++;
}
protected void back_Click(object sender, EventArgs e)
{
i--;
}
Session
будет хорошей идеей сохранить ценность. Сеанс хранится на сервере и, следовательно, не может быть изменен.
Обратите внимание, что идентификатор сеанса хранится в файле cookie на вашем компьютере. Но даже если вы отключите куки файлы, ваш сеанс будет по-прежнему работать, так как ваш sessionID будет передан как QueryString
в вашем URL-адресе.
Это кнопки ajax?
Если нет, и вы пытаетесь реализовать какую-либо разбивку на страницы, это не лучшее решение. Почему бы просто не отправить новое значение я в строку запроса?
-include Значение "i" в URL-адресе:
/Page/<i>
вместо
/Next
и т.п.
Если это ajax - вы все равно можете отправить значение "i" в тело запроса или в querystring.
Предполагая, что вам нужно значение "i" на нескольких страницах:
Я бы предложил вам использовать переменную Session
.
http://msdn.microsoft.com/en-us/library/vstudio/ms178581(v=vs.100).aspx
Session
если вам не нужно сохранять значения на разных страницах. Если ваша задача ограничена конкретной страницей, тогда используйте переменнуюViewState
(обернутую в свойство для простоты использования), а не переменную Session. Существует множество проблем, связанных с использованием переменных сеанса, и их лучше избегать везде, где это возможно.