Доступ к ClientID прерывает обратную передачу - PullRequest
1 голос
/ 10 сентября 2009

Иногда я отчаиваюсь при работе с ASP.Net - еще одна проблема, которой не должно быть!

На веб-форме есть таблица ASP. В таблице ASP есть пользовательский элемент управления, в который я делаю некоторые изменения. В таблице ASP есть текстовое поле .... пока что ничего необычного!

В коде позади, как часть Page_Load, мне нужно получить доступ к ClientID текстового поля, чтобы зарегистрировать некоторый javascript ... так что я делаю, и javascript, кажется, делает все, что ему нужно. Все счастливы.

Нет, нет, видимо, все недовольны, сам ASP.Net очень недоволен!

При доступе к ClientID идентификатор, который появляется в источнике:

myControl_myTextBox

комментирование строки, которая обращается к ClientID, означает, что идентификатор отображается как:

ctl00_BodyPlaceHolder_myControl_myTextBox

Строка, которая обращается к ClientID, выглядит следующим образом:

jsBuilder.AppendFormat(@"var filter = new TBFilter($(""#{0}"")[0]);", myTextBox.ClientID);

Это само по себе не беспокоит меня, но тот факт, что он нарушает обратную передачу, делает! Если вы введете что-то в это текстовое поле и нажмете кнопку «Отправить» (на странице есть кнопка «Отправить»), она перезагрузит страницу, но вернет значение по умолчанию обратно в текстовое поле и полностью проигнорирует то, что было у вас изначально. Безумие - я не сделал ничего особенно странного и необычного, так почему же он сломал обратную передачу?

1 Ответ

3 голосов
/ 10 сентября 2009

JavaScript, который вы регистрируете при загрузке страницы, делает ли это что-то, что не должно происходить при обратной передаче? Если это так, вы должны проверить Page.IsPostback, чтобы контролировать, когда его использовать.

Вы также должны знать, что в жизненном цикле страницы, Page_Load происходит перед любыми управляющими событиями обратной передачи (например, Click событие на кнопке). Поэтому, если зарегистрированный код javascript зависит от результата события Click, вам следует либо зарегистрировать его внутри события Click (если оно должно происходить только при нажатии на эту кнопку), либо события Page_PreRender (если оно должно всегда происходить).

EDIT:
Также возможно, что после Page_Load внесены некоторые изменения в способ создания идентификаторов клиента. Лучше всего сделать это в событии Page_PreRender, чтобы убедиться, что все загружено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...