Пользовательский элемент управления (ascx) и свойства

Magnus: стандарт определяет sizeof как получение числа байтов в объекте и что sizeof (символ) всегда один. Число битов в байте является конкретной реализацией.

Редактирование: стандарт C++ ANSI разделяет 5.3.3 Sizeof:

sizeof оператор приводит к числу байтов в объектном представлении его операнда. [...] sizeof (символ), sizeof (символ со знаком) и sizeof (неподписанный символ) равняются 1; результат sizeof относился к любому другому фундаментальному типу, определяется реализацией.

Раздел 1.6 модель памяти C++:

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

21
задан Jagd 24 July 2009 в 19:23
поделиться

5 ответов

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

10
ответ дан 29 November 2019 в 21:44
поделиться

Нет никаких проблем с использованием ViewState для хранения значений свойств для пользовательского элемента управления.

Ваше утверждение «чем больше свойств имеет пользовательский элемент управления, тем больше дерьма вы будете вставлять в него. ViewState "не обязательно верно. Конечно, ViewState может отслеживать значения свойств для элементов управления, но не хранить данные в скрытой переменной поля формы __ VIEWSTATE .

Звучит безумно, правда? См. ИСТИННОЕ понимание ViewState , где вы найдете блестящую статью о том, как работает ViewState.

Это зависит от того, когда вы инициализируете свойства элементов управления в его жизненном цикле. ViewState будет сохраняться только в скрытом поле __ VIEWSTATE после того, как StateBag для элемента управления начнет отслеживать изменения значений свойств. Это происходит в методе OnInit для элемента управления, который находится на ранней стадии жизненного цикла, но есть методы для установки значений свойств раньше, которые не повлекут за собой раздутие в размере __ VIEWSTATE и будут по-прежнему дает вам все преимущества.

См. статью по ссылке. Он все обсуждает очень ясно и лучше, чем я могу: -)

8
ответ дан 29 November 2019 в 21:44
поделиться

Ваша проблема именно в том, для чего предназначен ViewState: для сохранения свойств элемента управления через обратные передачи, поэтому ваше решение в порядке.

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

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

5
ответ дан 29 November 2019 в 21:44
поделиться

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

Вы также можете изучить ControlState - это отдельный «мешок», который люди не могут отключить, и он используется для таких вещей, как GridView, где есть некоторые вещи, которые нельзя отключить через viewstate, потому что это нарушает управление.

2
ответ дан 29 November 2019 в 21:44
поделиться

вы пробовали статические свойства? также помните, что http не имеет состояния, поэтому вы можете просто сбрасывать заголовок на каждой page_load

-1
ответ дан 29 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: