asp.net что использовать вместо viewstate - PullRequest
4 голосов
/ 27 января 2009

В настоящее время я использую viewstate только для того, чтобы сохранить номер текущей страницы, на которой я работаю, при перелистывании данных. У меня есть 3 элемента управления на странице, на которых есть данные, которые я могу пролистать.

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

Так что я хотел бы использовать что-то еще, чтобы отслеживать номер страницы, но я не уверен, что использовать. Должен ли я встроить его как скрытое поле формы? Передать это в строке запроса? Другие хорошие варианты?

Ответы [ 4 ]

6 голосов
/ 27 января 2009

Вы заявляете, что используете viewstate для хранения текущего номера страницы, и, по-моему, вы явно сохраняете этот номер в viewstate.

Однако asp.net по умолчанию будет хранить lot данных в viewstate. В вашем примере, имея 3 элемента управления с включенной подкачкой страниц, asp.net будет хранить «все данные в элементе управления», т.е. все данные, которые в данный момент отображаются в 3 элементах управления, будут сохранены в viewstate.

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

Если вам просто нужно сохранить номер страницы, вы можете, например, перевести его в состояние управления, как описано в msdn и в pluralsight .

Используйте строку запроса, как предложено в другом ответе.

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

Я бы действительно предложил прочитать Истинное понимание Viewstate Мруналом Брамбхаттом для более подробного объяснения состояния зрения.

2 голосов
/ 27 января 2009

При использовании HTTP без сохранения состояния трудно выбрать, где на самом деле хранить ваше состояние. В вашем примере я бы рассмотрел следующее вместо viewstate:

  1. Строка запроса - номер страницы достаточно мал, чтобы уместиться там.
  2. Cookies - в этом случае ваши данные будут храниться дольше и будут проходить через все запросы GET и POST.
  3. Сеанс - почти аналогичен предыдущему параметру, но данные будут храниться на сервере.
2 голосов
/ 27 января 2009

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

В ASP.Net ViewState включен по умолчанию для каждого элемента управления. Таким образом, простая метка со статическим текстом займет место во ViewState. Отключение этого очень поможет.

Посмотрите эти две статьи, они мне очень помогли в прошлом:

http://www.webreference.com/programming/asp/viewstate/ http://www.webpronews.com/expertarticles/2005/11/07/optimize-aspnet-pages-by-reducing-the-size-of-the-viewstate

Над какой версией ASP.Net вы работаете? ASP.Net 2.0 имеет намного меньшее ViewState, чем 1.1.

1 голос
/ 27 января 2009

Передача в строке запроса - хороший вариант, это делает его "взломанным" и хорошим для SEO. Так что по номеру страницы я бы никогда не посчитал ничего, кроме URL!

...