Как я могу переопределить или расширить стандартную функцию javascript WebForm_OnSubmit
WebForms?
Я использую типы ввода HTML5 на веб-сайте ASP.net WebForms. Пользовательский агент (например, Chrome, IE, Firefox) уже правильно обрабатывает очистку данных, альтернативный пользовательский интерфейс и т. Д.
Обычно, когда пользователь нажимает кнопку <input type="submit">
, User-Agent останавливает отправку и отображает пользовательский интерфейс, чтобы указать пользователю, что их ввод будет недопустимым:
Проблема с WebForms в том, что он не использует кнопку Отправить. Вместо этого все можно сделать с помощью обратной передачи javascript, а не отправки формы:
<asp:LinkButton ID="bbOK" Text="Save User" runat="server" OnClick="bbOK_Click"></asp:LinkButton>
Что при рендеринге в клиентский html становится вызовом Javascript:
WebForm_DoPostBackWithOptions(...)
Когда действительно длинная форма является тегом привязки:
<a id="Really_Long_Thing_ctl00_bbOK"
href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$VistaToolbar$ctl00$bbOK", "", true, "", "", false, true))'>
Save User
</a>
Это означает, что пользовательский агент никогда не выдает пользователю подсказку о том, что введенный элемент недействителен.
Несмотря на то, что form
не "отправлено", оно все равно вызывает событие onsubmit
. Я могу вручную запустить проверку формы HTML5, используя что-то вроде:
isValid = form.checkValidity();
В идеале я бы зацепил это событие на моем сайте ASP.web WebForms:
Site.master
<form runat="server" onsubmit="return CheckFormValidation(this)">
<script type="text/javascript">
function CheckFormValidation(sender)
{
//Is the html5 form validation method supported?
if (sender.checkValidity)
return sender.checkValidity();
//If the form doesn't support validation, then we just assume true
return true;
}
</script>
За исключением того, что инфраструктура WebForms удаляет обработчик метода my onsubmit
и заменяет его своим собственным:
<form id="ctl01" onsubmit="javascript:return WebForm_OnSubmit();" action="UserProperties.aspx?userGuid=00112233-5544-4666-7777-8899aabbccdd" method="post">
Таким образом, мой собственный вызов отправки игнорируется. Похоже, что углубление в WebForm_OnSubmit
ведет к кроличьей норе инфраструктуры валидации ASP.net WebForms:
function WebForm_OnSubmit()
{
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false)
return false;
return true;
}
который вызывает функцию:
var Page_ValidationActive = false;
function ValidatorOnSubmit()
{
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();
}
else
{
return true;
}
}
который вызывает, который вызывает, который использует, который проверяет.
Просто нужна проверка формы HTML5 с помощью WebForms
Проблема в том, что у WebForms есть огромная инфраструктура для проверки формы перед отправкой и отображения ошибок пользователям с помощью стандартизованного механизма (и всей инфраструктуры, которую я не использую). Он принимает на себя onsubmit
событие форм и не (обязательно) использует <input type="submit">
в процессе.
Что я могу сделать, чтобы убедить веб-сайт ASP.net WebForms позволить User-Agent проверить форму?
submit
в любом случае не было бы запущено - оно срабатывает только тогда, когда пользователь отправляет форму (так чтоformElement.submit()
не запускает его, насколько я помню), а отправка формы (не инициированная JavaScript) требует, чтобы форма имелаtype=submit
(input
илиbutton
) где угодно. - person PhistucK   schedule 29.03.2014