Иногда вы не можете точно сказать сколько вам понадобится контролов для отображения динамических данных. Например, вам нужно сгенерировать меню для отображения вариантов из какого-нибудь текстового конфига. И при этом, вы еще хотите как-то реагировать на события от этих контролов на стороне сервера. На первый взгляд задача кажется, как минимум, не простой. Но, давайте, приглядимся получше.
Итак, у нас есть несколько серверных контролов, у всех них свойство AutoPostBack="true", так как мы хотим как-то реагировать на изменение состояния каждого из них.
Как думаете, во что они превратятся на стороне клиента? На самом деле, в самые банальные HTML-контролы, которые при изменений состояния вызывают JavaScript функцию __doPostBack
Эта функция добавляется в HTML-код страницы автоматически, если на ней есть хоть один серверный контрол. Если же все контролы хотите генерировать самостоятельно, то можете написать что-то типа:
То есть, в том, чтобы получить чекбокс, который при изменений состояния будет отправлять страницу на сервер, ничего трудного нет. Достаточно написать что-то типа:
Response.Write("чекбокс");
Теперь переходим к более интересной части - как узнать о существовании этого чекбокса на сервере.
Итак, что нужно сделать, чтобы на стороне сервера отловить это событие изменения состояния чекбокса? Если вы внимательно посмотрите на код функции, __doPostBack, то сразу догадаетесь, что все что нужно сделать, чтобы понять что за контрол вызвал отправку формы это:
string controlName = Page.Request.Params["__EVENTTARGET"];
А состояние контрола можно получить старым добрым способом:
string controlState = Request["checkbox1"].ToString();
Комментариев нет:
Отправить комментарий