Есть ли способ поддерживать ASP.NET ViewState в динамически отображаемом элементе управления HTML? - PullRequest
1 голос
/ 11 ноября 2008

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

Существует способ сделать это с помощью элемента управления CheckBox сервера ASP.NET, добавив их в событие OnLoad с помощью this.Controls.Add (), и давая им одинаковые идентификаторы каждый раз, но я не умею это делать:)

Ответы [ 3 ]

2 голосов
/ 11 ноября 2008

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

2 голосов
/ 11 ноября 2008

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

Также важно установить явный идентификатор . Когда ViewState сохраняется и восстанавливается, идентификаторы элементов управления должны совпадать.

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

1 голос
/ 11 ноября 2008

Вы можете просто получить доступ к ViewState напрямую:

bool checked = (bool)(ViewState["ThisControlCheckState"] ?? false);
if (checked) {
    write("<input ... >");
}
else {
    write("<input ... >");
}

Чтобы сохранить значение от пользователя, вы можете сделать что-то подобное в PostBack:

ViewState["ThisControlCheckState"] = request.Params["checkboxName"].ToString() == "1";
...