Подтвердить что ты не робот

Когда включить EnableViewState на сервере?

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

Я рассматривал этот SqlDatasource пример и заметил, что состояние представления для управления меткой не включено:

<asp:Label ID="ErrorMessageLabel" EnableViewState="false" runat="server" />

Почему в элементе управления меткой не включен EnableViewState? Я знаю, что включение состояния представления несет некоторые накладные расходы, поэтому я хотел бы использовать его только тогда, когда это необходимо.

4b9b3361

Ответ 1

Здесь хорошее эмпирическое правило: если вы (1) меняете значение свойства в коде, и (2) нужно знать, какое значение вы задали в последующей обратной передаче, не пересчитывая значение, тогда вам нужно использовать ViewState.

Например. В моей разметке страницы у меня может быть элемент управления Label, указанный следующим образом:

<asp:Label ID="TitleLabel" runat="server" Text="Update this Employee" />

Затем в событии Page_Load у меня есть этот код:

If Not IsPostBack AndAlso myEmployeeObject.IsNew Then TitleLabel.Text = "Create a new Employee"

Изменив значение свойства Text, я ввел новый элемент в ViewState. Если я получу значение свойства Label Text во время любого последующего PostBack, значение будет "Создать нового сотрудника".

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

В моем предыдущем примере я бы решил пересчитать свойство Label Text на каждом PostBack и прекратить хранить свойство Text в ViewState. Вот как выглядела бы моя обновленная надпись:

<asp:Label ID="TitleLabel" runat="server" Text="Update this Employee" EnableViewState="false" />

И мое обновленное событие Page_Load:

If myEmployeeObject.IsNew Then TitleLabel.Text = "Create a new Employee"

Ответ 2

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

void Button1_Click()
{
   label1.text += " more!";
}

без viewstate postback не смог определить содержание метки, и вы просто получите "больше!". снова и снова, без добавления. попробуйте.

Действительно, наше эмпирическое правило в моем офисе просто отключает его на уровне страницы, а затем включает его, как вам нужно.

Ответ 3

Сначала понять состояние представления, вот blog, который может помочь. Начните разработку своих страниц, отключив viewstate на уровне страницы. Большинство элементов управления в asp.net 2.0 сохраняют состояние, необходимое для их функционирования в состоянии управления, поэтому отключить состояние просмотра не повлияет на большинство элементов управления.

Для элементов управления, которые сохраняют данные, привязанные к ним в состоянии представления, таком как поле "Список", вы можете избежать данных при посадке в состоянии просмотра (что отлично подходит для большинства случаев использования), выполнив привязку к событию PreInit.

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

И, наконец, используйте инструменты, которые помогут вам увидеть байты в состоянии просмотра страницы. Вспомогательный помощник ASP.NET View State и добавление в Fiddler, который показывает данные в представлении, поможет вам в этом отношении.

Ответ 4

включить enableviewstate только в том случае, если вы хотите сохранить значения в http-запросах, кроме этого, чтобы он был равен = false. также вам не нужно включать displayviewstate для использования элемента управления.

Ответ 5

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

Любой тип управления, который выводит несколько статический текст (материал, который вы не получаете от пользователя), обычно не будет иметь разрешения на просмотр. Это минимизирует viewstate.

Ответ 6

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

вот одна из лучших статей, которые я видел

Ответ 7

Честно говоря, я не могу думать о том, что вы хотите, чтобы viewstate установил true для элементов управления метками. Его быстрый способ сделать w3wp.exe занять кластеры памяти.