Как объявить общую переменную для всех действий на странице asp.net

1

У меня есть одна страница asp.net со следующей и обратной кнопкой и переменной "i", каждый раз, когда я нажимаю кнопку "Далее" или "Назад", переменная "i" будет увеличиваться или уменьшаться на 1. Так как я могу объявить переменную i? Я не хочу использовать "public static int i". Должен ли я использовать сеанс или viewstate? Есть ли лучшие способы сделать это?

  • 1
    Да, вы можете использовать сеанс или viewstate. Никогда не статическое поле, так как это значение будет одинаковым для каждого запроса (пользователя).
  • 0
    НЕ используйте переменную Session если вам не нужно сохранять значения на разных страницах. Если ваша задача ограничена конкретной страницей, тогда используйте переменную ViewState (обернутую в свойство для простоты использования), а не переменную Session. Существует множество проблем, связанных с использованием переменных сеанса, и их лучше избегать везде, где это возможно.
Показать ещё 3 комментария
Теги:

5 ответов

1

Состояние 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.

  • 1
    Большое спасибо за ваш четкий ответ.
1

Вы можете использовать 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--;
}
  • 0
    большое спасибо: D
0

Session будет хорошей идеей сохранить ценность. Сеанс хранится на сервере и, следовательно, не может быть изменен.

Обратите внимание, что идентификатор сеанса хранится в файле cookie на вашем компьютере. Но даже если вы отключите куки файлы, ваш сеанс будет по-прежнему работать, так как ваш sessionID будет передан как QueryString в вашем URL-адресе.

  • 0
    Человек, который отказался от этого, пожалуйста, дайте мне знать, почему.
  • 0
    Для объяснения понижения, пожалуйста, прочитайте мои комментарии в разделе комментариев вопроса.
0

Это кнопки ajax?

Если нет, и вы пытаетесь реализовать какую-либо разбивку на страницы, это не лучшее решение. Почему бы просто не отправить новое значение я в строку запроса?

-include Значение "i" в URL-адресе:

 /Page/<i> 

вместо

/Next

и т.п.

Если это ajax - вы все равно можете отправить значение "i" в тело запроса или в querystring.

  • 0
    спасибо, я попробую это :)
-2

Предполагая, что вам нужно значение "i" на нескольких страницах:
Я бы предложил вам использовать переменную Session.
http://msdn.microsoft.com/en-us/library/vstudio/ms178581(v=vs.100).aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню