Скотт,
Я думаю, что существует неправильное понимание того, как работает платформа ASP.NET Web Forms. Итак, сначала небольшая теория.
Страницы ASP.NET Web Forms содержат файлы дизайна и кода с выделенным кодом. Файл дизайна имеет HTML-разметку и «элементы управления», которые являются ссылочными тегами для пользовательских или пользовательских элементов управления. Каждый элемент, имеющий атрибут runat = "server"
, является серверным элементом управления (то есть он доступен из кода по его идентификатору).
Когда страница открывается в браузере, ASP.NET берет файл дизайна, обрабатывает эти контрольные ссылки и, наконец, генерирует чистый HTML.
ViewState - это скрытая переменная в HTML, которая сохраняет внутреннее состояние всех элементов управления, помеченных runat = "server"
, а также для свойства EnableViewState, установленного в значение True.
Скажем, у вас есть DataGrid с EnableViewState = False
. В этой сетке есть строки, содержащие серверные элементы управления, и вы хотите, чтобы они были в ViewState. Вы по-прежнему можете иметь их EnableViewState = True
и быть в ViewState, и вы все равно можете связываться с событиями для этих элементов управления.
Таким образом, даже если DataGrid отсутствует в ViewState, его дочерние элементы могут быть в ViewState, и вы можете обрабатывать соответствующие события.
Вам нужно будет каждый раз инициализировать DataGrid в событии PageLoad, если вы хотите, чтобы он отображал данные после каждой обратной передачи.
ViewState сохраняет внутреннее состояние элемента управления, поэтому вы не можете иметь некоторые свойства элемента управления во ViewState, а другие - вне ViewState. Но у вас могут быть дочерние элементы управления (они не являются свойствами, они являются сущностями!), Чтобы быть во ViewState, даже если родительский элемент управления не находится во ViewState.
Дайте мне знать, если вы хотите, чтобы я был более конкретным в этом. Если вы хотите углубиться внутрь, есть замечательная книга от Nikhil Kothari о разработке элементов управления. Я думаю, что я видел это где-то как электронную книгу.