2009-09-17 2 views
0

Я рассмотрел аналогичные вопросы о переполнении стека, но не смог найти решение этой проблемы. У меня есть простая (не совсем, но давайте притвориться) страница ASP.NET с панелью обновления внутри нее.ASP.NET: JavaScript, изменяющий значение HiddenField перед отправкой

В этой панели обновления есть элемент управления HiddenField со значением, которое будет установлено/обновлено с помощью моего собственного JavaScript. Значение : обновлено, как я могу видеть в DOM, используя Firebug.

Рядом с этим HiddenField есть LinkButton, который вызывает JavaScript для изменения значения HiddenField с использованием OnClientClick (это работает). LinkButton также имеет обработчик OnClick, который выполняется после того, как значение было изменено.

Однако в обработчике OnClick я получаю начальное значение HiddenField, а не значение, заданное JavaScript!

Почему это? Это случай "PEBKAC"?

EDIT: Пробовал то же самое с TextBox без каких-либо успехов. Также попытался изменить значение вручную с помощью Firebug перед отправкой формы без каких-либо успехов.

EDIT 2: Я просто понял, что Page_Load вызывается перед OnClick обработчик, который был Мессинг вещи. Я не стану исключать вопрос, так как другие люди могут иметь такую ​​же проблему и могут найти этот вопрос ценным.

+0

Возможно, какой-то код может помочь нам разобраться в этом вопросе. Я провел некоторое тестирование, и я могу установить значение скрытого поля с помощью «OnClientClick», а затем получить его в обработчике событий OnClick на сервере. – Phaedrus

+0

Я нашел проблему с моим кодом и обновил вопрос, чтобы указать это. –

ответ

0

Вам нужно будет сделать это, используя событие EndRequestHandler, предоставленное панелью обновления AJAX.

Пожалуйста, посмотрите на это ->

http://www.codeproject.com/KB/ajax/AfterAjaxUpdate.aspx?display=Print

+1

Это похоже на вещи, которые происходят * после * запроса AJAX, тогда как я просто хочу, чтобы обработчик 'OnClick' получал доступ к новому значению. –

+0

Вам нужно будет рассмотреть AJAX, поскольку ваш элемент управления находится внутри панели обновления. – Bhaskar

0

Как вы генерируя новый вход на клиенте? Возможно ли это выполнить на сервере?

Таким образом, вы можете использовать только OnClick вместо OnClick и OnClientClick.

+0

Невозможно создать новый вход на сервере. –

1

Это кажется мне, как если бы в представлении было плохой шуткой (как часто). Я думаю, что когда страница возвращается, скрытое поле инициализируется значением, содержащимся в представлении.

Попробуйте одно: не обращайтесь к значению непосредственно через yourHiddenField.Value, но в OnInit своей страницы получите его с Request.Forms[yourHiddenField.UniqueId] и отбросьте его на HiddenField и извлеките значение. Я не уверен, что это правильный синтаксис. Значения «отправленные» должны быть в объекте «Запрос» где-то, если я правильно помню. Посмотрите, получаете ли вы там значение. Если вы его получите, проблема - это представление, которое отображается после события OnInit на странице. Затем мы должны найти решение для этого ...

Смежные вопросы