Должен ли я использовать Viewstate в ASP.NET

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

MVC Framework действительно выглядит интересно! Спасибо, Бири!

Taptronic 25.09.2008 17:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
3 233
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

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

Я делал много классических ASP, и когда я впервые перешел на ASP.Net, это поразило меня. Однако, как только вы привыкнете к этой модели, она станет довольно приятной по сравнению со старым способом работы. Буду рад, если мне больше никогда не придется смотреть на очередной набор рекордов ADO :)

Josh 25.09.2008 17:26

Я в настоящее время нахожусь в этом режиме "это разносит мне голову". :-) Как и все остальное, однажды это просто произойдет.

Taptronic 25.09.2008 17:30

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

awe 12.11.2010 15:01

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

Я собираюсь поэкспериментировать с этим. Благодарю за ваш ответ.

Taptronic 25.09.2008 17:26

Узнайте разницу между ViewState и ControlState

John Sheehan 25.09.2008 22:37
Ответ принят как подходящий

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

Спасибо. Я собираюсь проверить этот материал MVC.

Taptronic 25.09.2008 17:30

Viewstate сохраняется автоматически для элементов управления asp.net, «привязанных» к странице. Вам мало что нужно сделать, значения и некоторая другая информация передаются в скрытом вводе в кодировке B64. Вы можете посмотреть на это, если хотите, но это не имеет значения, все это делается автоматически для вас.

Я начал смотреть на эту кодировку и подумал: «Чувак! Что это ?!» и читал об этом, но видел или знал, есть ли альтернатива. Бри говорит, что нужно изучить структуру MVC, и я, вероятно, займусь этим. Спасибо!

Taptronic 25.09.2008 17:28

@ Оптимальные решения: вам не нужно понимать закодированное значение состояния просмотра. Это скрытая функция, которую .NET обрабатывает автоматически - это просто способ хранения состояния просмотра.

awe 12.11.2010 15:07

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

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

Размер был одной проблемой. Другая проблема - это «неизвестность» и кривая обучения - что, как я вижу из этих ответов, может быть не так уж плохо, как кажется. Спасибо!

Taptronic 25.09.2008 17:31

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

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

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

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

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

Viewstate["Key"] = value;

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

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

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

  • как отключить его на уровне сайта, страницы и управления
  • почему MachineKey актуален в веб-фермах
  • почему ваш журнал событий полон ошибок ViewStateAuthentication
  • что такое ViewStateUserKey

С точки зрения фактического обучения, это, вероятно, тщательное прочтение пары статей MSDN.

Спасибо за помощь. Мне нужно выделить время, чтобы прочитать эти статьи MSDN. Мне просто понравился тот факт, что более 10 лет назад я мог сразу погрузиться в ASP, не используя ничего, кроме блокнота, и за пару часов сделал довольно крупное приложение. На этот раз так не будет.

Taptronic 25.09.2008 17:38

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

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

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

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

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

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

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

Таким образом, если вы отправляете клиенту текстовое поле с фразой «привет», пользователь изменяет его на «Увидимся», а затем отправляет форму. В текстовом поле к моменту срабатывания события Page_Load будет текстовое поле с «Увидимся» в атрибуте ТЕКСТ.

Эту серию сообщений необходимо прочитать для понимания ViewState.

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

'<%@ Control Language = "C#" AutoEventWireup = "true" CodeFile = "HomePage.ascx.cs" Inherits = "HomePage" %>
<script runat = "server">
  void testHF_ValueChanged(object sender, EventArgs e)
    {
       this.HFvalue.Text = this.testHF.Value ;

    }
</script>
<asp:Label ID = "UserNamelbl" runat = "server" Text = "User Name : " Visible = "false"></asp:Label>
<asp:TextBox ID = "UserNametxt" runat = "server" Visible = "false" ></asp:TextBox>
 <asp:Label ID = "HFvalue" Text = "......" runat = "server"></asp:Label>
 <asp:HiddenField ID = "testHF"
OnValueChanged = "testHF_ValueChanged"
value = "" 
runat = "server" ></asp:HiddenField>
<input type = "submit" name = "SubmitButton" value = "Submit" onclick = "CL()" />

<script type = "text/javascript">
    function CL() 
    {
        this.testHF.Value = this.UserNametxt.Text;  
    }
</script>
'

Привет, Абдалла, добро пожаловать в SO. Это очень старый вопрос. Перед отправкой ответа проверьте следующий раз, когда был опубликован вопрос!

Mad Dog Tannen 05.12.2013 11:43

Другие вопросы по теме