У меня есть элемент управления, который выполняет проверку на стороне клиента для отображения сообщений об ошибках, если проверка завершается неудачно перед выполнением обратной передачи.Если проверка прошла успешно, она отправляет обратно на сервер с помощью __doPostBack:
<script type="text/javascript">
$(document).ready(function () {
$(".save-btn").click(function () {
if (Page_ClientValidate() == false) {
window.scrollTo(0, 0);
$(".error").show();
$(".success").hide();
}
else {
$(".error").hide();
$(".success").hide();
__doPostBack('<%= btnSaveSection.ClientID %>', '');
}
});
});
</script>
В коде позади я также добавляю метод onClick для этой кнопки.
this.btnSaveSection.Click += new System.Web.UI.ImageClickEventHandler(this.btnSaveSection_Click);
Для IE и Firefox __doPostBack работает нормально, даже если я не устанавливаю параметры __doPostBack.(Это делается на нескольких элементах управления, поэтому у меня была функция в связанном элементе управления сценарием, и она была обозначена как __doPostBack ('', '');) После проверки doPostBack вызывает метод кода кода ASP.Net.Но в браузерах WebKit (Chrome и Safari) метод btnSaveSection_Click никогда не вызывается.На самом деле, страница высокого уровня (input.aspx) получает событие Page_Load, в то время как элемент управления (section.aspx) даже не получает этого.Мой текущий обходной путь - поместить скрипт в каждый элемент управления и добавить ClientID кнопки, который заставляет его хотя бы вызывать метод Page_Load элемента управления.Оттуда я могу проверить Page.IsPostBack и разобрать элемент управления кнопки из переменных Page.Request.Form.
Но я вынужден думать, что должен быть лучший способ.Кто-нибудь знает, почему Firefox / IE работает с ASP.Net для вызова правильного метода, а Chrome / Safari - нет?Это случайность, что она работает для FF / IE, поскольку она не должна работать вообще без установленной цели?Я протестировал это довольно подробно с .Net 3.5, но поведение было таким же с 4.0.