Должен ли я использовать Viewstate в ASP.NET - PullRequest
4 голосов
/ 25 сентября 2008

Я перехожу с классического ASP на ASP.NET и столкнулся с тем, что многие из вас уже называют "viewstate". Я могу прыгать с пистолетом с моим предположением, но это выглядит очень громоздким. В прошлом я разработал много форм ASP и никогда не имел проблем с сохранением состояния. Есть ли другой способ ИЛИ мне придется изучить эту вещь Viewstate в ASP.NET? Я использую Visual Studio 2008, VB.NET в качестве кода языка и Framework v3.5 с SQL Server 2005.

Ответы [ 13 ]

6 голосов
/ 25 сентября 2008

Эта серия постов должна быть прочитана для понимания ViewState

Я отключаю его и выполняю большую часть своей работы в Page_Init вместо Load (значения все еще поддерживаются из-за ControlState). Эта установка хорошо сработала для меня.

6 голосов
/ 25 сентября 2008

Вам не нужно. Проверьте MVC рамки . Он исключает ViewState и работает как старый ASP (по крайней мере, с этой точки зрения).

5 голосов
/ 25 сентября 2008

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

Тем не менее, бывают моменты, когда полезно отключить ViewState по той же причине. Например, единственное место, где я всегда выключаю ViewState, - это метка СООБЩЕНИЯ. Таким образом, когда мне нужно распечатать сообщение для пользователя (которое должно появиться только один раз, а затем исчезнуть), я просто добавляю текст на ярлык и затем забываю об этом. Во время следующего PostBack метка автоматически вернется к тексту, найденному в объявлении ASPX для этого элемента управления (в данном случае пустой строке).

Теперь обратите внимание, что это не имеет ничего общего с коллекцией форм, значения которой публикуются в IIS во время PostBack. Коллекция форм отправляет значения, которые пользователь вводит в элементы формы (текстовые поля, флажки, раскрывающиеся списки и т. Д.). Эти .NET будут заполнены в соответствующем месте - и это происходит ПОСЛЕ ViewState был обработан.

Таким образом, если вы отправите текстовое поле с фразой «привет там» клиенту, пользователь изменит его на «Увидимся», а затем отправит форму, что будет иметь текстовое поле к моменту запуска события Page_Load текстовое поле с надписью "Увидимся" в атрибуте TEXT.

3 голосов
/ 25 сентября 2008

Viewstate является частью пакета, когда вы работаете с ASP.NET. Для базовой страницы / веб-сайта вам не нужно «знать», как использовать Viewstate. Он просто используется, когда вы помещаете элементы управления на страницы.

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

Если вы не хотите иметь дело с Viewstate, рассмотрите возможность использования инфраструктуры ASP.NET MVC. Скорее всего, вам будет удобнее работать с платформой MVC из Classic ASP.

3 голосов
/ 25 сентября 2008

Некоторые элементы управления сильно повреждены, когда вы выключаете ViewState, поэтому будьте готовы решить эти проблемы. Проще всего быть ленивым и оставить его включенным, но без контроля ViewState может легко составлять 30% от размера вашего HTML.

Например, скажем, у вас есть DropDown, и вы связываете его со списком фруктов. Вы связываете это в блоке if (! IsPostBack) {} при загрузке страницы. Если вы выключите ViewState, вы потеряете элементы при нажатии кнопки. Они должны быть привязаны к каждой загрузке страницы. Вы также потеряете выбранный вами индекс, поэтому вам придется извлечь его из переменных Request.Form [].

3 голосов
/ 25 сентября 2008

В классическом ASP мы всегда использовали скрытое поле для выполнения работы. Viewstate - это просто способ сделать это автоматически. Поверьте мне, кривая обучения не так высока, как вы думаете.

2 голосов
/ 25 сентября 2008

Я определенно могу рекомендовать избегать ViewState в DataGrids и DropDownLists, потому что я только недавно начал делать это сам. Я сделал это не для удовольствия, мне пришлось исправить страницу, которая стала настолько большой, что это вызывало другие проблемы. Но это оказалось легко, и результаты были настолько впечатляющими, что я очень доволен. Конечно, для небольшого простого приложения или для небольших объемов данных в этом нет необходимости, но, с другой стороны, хорошо быть последовательным (всегда переходите от известного к известному, чтобы вы могли постоянно улучшать свой процесс ...) и почему перевозить дополнительный багаж, когда-нибудь?

Это потребует небольшого ручного вмешательства с вашей стороны. Например, если вы отключите viewstate для выпадающих списков, вам нужно будет перепривязывать их при каждой обратной передаче, а затем восстанавливать SelectedValue из объекта Request. Вам нужно прочитать об этом, но в Google есть много легкодоступной информации.

2 голосов
/ 25 сентября 2008

ViewState работает автоматически по большей части. Именно так ASP.NET отслеживает текущее состояние всех своих элементов управления.

Вы также можете использовать viewstate вручную, если хотите сохранить некоторые дополнительные данные. Это так просто, как:

Viewstate["Key"] = value;

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

2 голосов
/ 25 сентября 2008

ViewState является полностью необязательным почти во всех, если не во всех случаях. ASP.NET автоматически заполняет поля, даже если ViewStateEnabled = false. Я использую ASP.NET в течение 5 или 6 лет и никогда не зависел от ViewState. Я даже отключаю его, когда могу.

1 голос
/ 25 сентября 2008

ViewState - необходимое зло, присущее метафоре веб-форм. Лично я считаю эту методологию устаревшей, раздутой и, как правило, не дружественной к Интернету. Лучше проверить MVC рамки, как предложено выше.

Я предлагаю вам избежать соблазна использовать ViewState в качестве «кэша» для передачи данных туда и обратно (я видел сайты, делающие это из-за кластерной установки и отсутствия состояния сеанса, поддерживаемого SQL). Данные сериализуются и добавляются на страницу. Они должны выполнять циклическую обработку каждого запроса, увеличивая общий размер страницы и замедляя загрузку вашего сайта.

...