如何覆盖或扩展标准 WebForms WebForm_OnSubmit
javascript 函数?
我在 ASP.net WebForms 网站中使用 HTML5 输入类型。用户代理(例如 Chrome、IE、Firefox)已经正确处理数据清理、备用 UI 等。
通常,当用户单击<input type="submit">
按钮时,User-Agent 将停止提交,并显示 UI 以向用户指示他们的输入将是无效的:
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 站点中挂钩该事件:
站点主
<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 基础设施删除我的 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;
}
}
哪个调用,哪个调用,哪个使用,哪个检查。
只需要使用 WebForms 进行 HTML5 表单验证
问题是 WebForms 有一个巨大的基础设施,用于在提交之前检查表单,并通过标准化机制(以及我不使用的整个基础设施)向用户显示错误。它接管了onsubmit
表单的事件,并且它不会(必然)<input type="submit">
在过程中使用 an 。
我可以做些什么来说服 ASP.net WebForms 网站让 User-Agent 验证表单?