2008-09-25 10 views
4

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

+0

MVC Framework действительно интересен! Спасибо, Бири! – Taptronic 2008-09-25 13:35:21

ответ

6

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

+0

Спасибо. Я собираюсь проверить этот материал MVC. – Taptronic 2008-09-25 13:30:50

3

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

+0

Удовлетворительно слышать (кривая обучения). :-) – Taptronic 2008-09-25 13:25:35

+0

Я сделал много классического ASP, и когда я впервые перешел на ASP.Net, он взорвал мой разум. Однако, как только вы привыкнете к модели, это довольно хорошо по сравнению со старым способом делать вещи. Я буду рад, если мне больше не придется снова смотреть на другой набор записей ADO :) – Josh 2008-09-25 13:26:54

+0

В настоящее время я нахожусь в этом режиме «его раздувая мою голову». :-) Как и все остальное, однажды это произойдет. – Taptronic 2008-09-25 13:30:10

2

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

+0

Мне нужно экспериментировать с этим. Благодарю за ваш ответ. – Taptronic 2008-09-25 13:26:47

+0

Узнайте разницу между ViewState и ControlState – 2008-09-25 18:37:05

1

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

+0

Я начал смотреть на эту кодировку и думал: «Человек! Это что ?!» и прочитал об этом, но видел или знал, есть ли альтернатива. Бри говорит, чтобы посмотреть в структуру MVC, и я, вероятно, буду. Спасибо! – Taptronic 2008-09-25 13:28:36

3

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

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

3

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

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

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

2

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

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

Viewstate["Key"] = value; 

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

1

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

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

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

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

1

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

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

2

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

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

5

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

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

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

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

6

This series of posts is must reading for understanding ViewState

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

0
'<%@ 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> 
'