Когда следует включить EnableViewState на серверном элементе управления?

Есть ли какие-либо рекомендации или правила для включения состояние просмотра на серверном элементе управления? А когда это надо нет?

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

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

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

Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
28
0
55 383
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

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

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

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

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

не так. Вещи, добавленные в разметку <asp: Label Text = "give me" runat = server />, не нуждаются в том, чтобы состояние просмотра было доступно в обратной передаче.

Al W 16.01.2009 01:37

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

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

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

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

и еще один хороший - weblogs.asp.net/infinitiesloop/archive/2006/08/03/…

Russ Cam 25.04.2012 18:30

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

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

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

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

Ответ принят как подходящий

Вот хорошее практическое правило: если вы (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. Если я получаю значение свойства Text метки во время любого последующего PostBack, значением будет «Создать нового сотрудника».

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

В моем предыдущем примере я бы выбрал пересчет свойства Text Label для каждого 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"

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

Ярлыки, свойства которых рассчитываются динамически.

John Saunders 30.10.2014 18:39

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