Я работаю над системой комментариев для веб-сайта, и при каждой обратной передаче страница генерирует пользовательский элемент управления (называемый ucComment) для каждого отдельного комментария в базе данных, относящейся к этой странице. Каждый ucComment имеет кнопку «Ответить», которая позволяет вам отвечать на каждый отдельный комментарий.
У меня была проблема с тем, что кнопка Ответить ничего не делала, когда я наконец понял, что каждый раз, когда создается новый комментарий, при следующей обратной передаче он смещает все контрольные идентификаторы страницы. Другими словами, когда я нажимаю ctl00_Content_ctl00_ctl01_ctl0 7 _lbtnRespond, этот элемент управления будет фактически сгенерирован как ctl00_Content_ctl00_ctl01_ctl0 8 _lbtnRespond при следующей обратной передаче. Таким образом, событие, связанное с ctl07, просто не произойдет.
Пока я бродил по сети, я читал о переопределении ClientID. Я подумал, что если бы я мог назвать элементы управления так, как я хотел, я мог бы обойти мою проблему.
http://west -wind.com / Weblog / сообщений / 4605.aspx
Это выглядело как отличный хак, но не генерирует события из-за несоответствия между сгенерированным идентификатором на странице и тем, как идентификатор был представлен в дереве элементов управления.
есть даже один парень, который заимствовал из MasterPage, чтобы изменить способ, которым работает дерево элементов управления, чтобы заставить вышеуказанный хак работать для постбэков:
http://www.netquarry.com/index.php/2009/03/master-pages-ajax-and-javascript-10292/
но я боюсь, что могут быть неисчислимые последствия.
Что я должен сделать, чтобы моя система комментирования работала так, чтобы я мог отвечать на конкретный комментарий и чтобы событие ответа продолжало срабатывать, даже если элемент управления переименован в этой обратной передаче?