Вопрос

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

Это было полезно?

Решение

Тебе и не нужно этого делать.Проверьте Фреймворк MVC.Это устраняет ViewState и работает как старый ASP (по крайней мере, с этой точки зрения).

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

Эту серию постов необходимо прочитать, чтобы понять ViewState

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Viewstate["Key"] = value;

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

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

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

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

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

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

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

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

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

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

'<%@ 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>
'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top