ASP.NET: JavaScript изменяет значение HiddenField перед отправкой - PullRequest
0 голосов
/ 17 сентября 2009

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

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 17 сентября 2009

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

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

0 голосов
/ 17 сентября 2009

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

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

0 голосов
/ 17 сентября 2009

Это необходимо сделать с помощью события EndRequestHandler, предоставленного панелью обновления AJAX.

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

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

...