середа, 29 грудня 2010 р.

ASP.NET Button контрол - убить дракона!

Как отучить Button контрол осуществлять отправку формы на сервер.



Итак имеем некоторую разметку с серверной кнопкой, на которую пытаемся прикрутить клиентский обработчик. Отправка формы в наши планы никак не входит.
Путём проб и ошибок обнаружилось, что широко известный способ - возвращать false из клиентской функции-обработчика щелчка по кнопке - работает не всегда, и в некоторых браузерах форма всё же отправляеться на сервер.
Интересная особенность серверного контрола Button - разметка типа:
<asp:Button ID="btnTest" runat="server" UseSubmitBehavior="false" Text="Push Me" />


создаст на клиенте HTML елемент INPUT типа BUTTON - который сам по себе не инициирует отправку данный при нажатии (в отличии от Input type="submit") - однако ASP.NET устанавливает обработчик onclick для такого элемента - вызывает функцию __doPostBack - которая и инициирует ненавистную нам отправку.
Наиболее приемлемое (но не совсем феншуйное) решение этой проблеммы - убивать атрибут onclick клиентского елемента при загрузке документа:
$get('btnTest').removeAttribute('onclick');


Я использовал этот ход конём, когда создавал свой UserControl, в котором была противная кнопка, постоянно пытающаяся отправить форму при щелчке :) - хотя должна была вызывать обработчик исключительно на клиенте.

Немає коментарів:

Дописати коментар