Я хочу создать собственный элемент управления, в котором есть несколько элементов управления <input type='checkbox' />, которые я визуализирую в методе Render.
Можно ли сохранить ViewState (например, отмечен или нет) в этих элементах управления?
Это можно сделать с помощью элемента управления CheckBox сервера ASP.NET, добавляя их в событие OnLoad с помощью this.Controls.Add (), и каждый раз давая им одинаковые идентификаторы, но я не хочу этого делать :)





Вы можете просто получить прямой доступ к ViewState:
bool checked = (bool)(ViewState["ThisControlCheckState"] ?? false);
if (checked) {
write("<input ... >");
}
else {
write("<input ... >");
}
Чтобы сохранить значение от пользователя, вы можете сделать что-то вроде этого в PostBack:
ViewState["ThisControlCheckState"] = request.Params["checkboxName"].ToString() == "1";
Если вы хотите, чтобы ViewState был восстановлен как динамический элемент управления, вы должны воссоздать этот элемент управления до в событии загрузки. Это означает помещение этого кода в обработчик Init.
Когда вы создаете элемент управления, убедитесь, что вы добавили их на страницу первый, а затем задали для них какие-либо свойства. Это связано с тем, что для того, чтобы менеджер ViewState мог рассматривать элемент управления для управления, он должен обнаруживать изменение, и он может обнаруживать изменения только после того, как элемент управления был добавлен в коллекцию Controls.
Также важно установить явный идентификатор. При сохранении и восстановлении ViewState идентификаторы элементов управления должны совпадать.
Также убедитесь, что вы создаете элементы управления в нужный момент (OnInit) жизненный цикл страницы.
Как мне воссоздать элемент управления HTML перед событием Load?