我们可以为标准ASP.NET Web表单验证器自定义客户端javascript验证吗?
时间:2020-03-06 14:38:08 来源:igfitidea点击:
我们可以为标准ASP.NET Web表单验证器自定义客户端javascript验证吗?
例如,使用asp:RequiredFieldValidator保留服务器端代码,但使用jQuery来实现自己的客户端通知,例如突出显示字段或者背景色。
解决方案
我们可以做的就是连接到验证器并分配一个新的评估方法,如下所示:
<script type="text/javascript"> rfv.evaluationfunction = validator; function validator(sender, e) { alert('rawr'); } </script>
rfv是我所需的字段验证器的ID。我们必须在页面底部执行此操作,以便它在注册验证器的javascript之后进行分配。
仅使用CustomFieldValidator并分配其客户端验证属性就容易得多。
<asp:CustomValidator ControlToValidate="txtBox" ClientValidationFunction="onValidate" /> <script type='text/javascript'> function onValidate(sender, e) { alert('do validation'); } </script>
在此处和此处查看文档。
是的,我已经这样做了。我使用Firebug找出Dot.Net JS函数,然后劫持了验证器函数
以下内容将应用于所有验证器,并且纯粹是客户端。我使用它来更改ASP.Net验证的显示方式,而不是实际执行验证的方式。必须将其包装在$(document).ready()中,以确保覆盖原始的ASP.net验证。
/** * Re-assigns a couple of the ASP.NET validation JS functions to * provide a more flexible approach */ function UpgradeASPNETValidation(){ // Hi-Hyman the ASP.NET error display only if required if (typeof(Page_ClientValidate) != "undefined") { ValidatorUpdateDisplay = NicerValidatorUpdateDisplay; AspPage_ClientValidate = Page_ClientValidate; Page_ClientValidate = NicerPage_ClientValidate; } } /** * Extends the classic ASP.NET validation to add a class to the parent span when invalid */ function NicerValidatorUpdateDisplay(val){ if (val.isvalid){ // do custom removing $(val).fadeOut('slow'); } else { // do custom show $(val).fadeIn('slow'); } } /** * Extends classic ASP.NET validation to include parent element styling */ function NicerPage_ClientValidate(validationGroup){ var valid = AspPage_ClientValidate(validationGroup); if (!valid){ // do custom styling etc // I added a background colour to the parent object $(this).parent().addClass('invalidField'); } }
标准CustomValidator具有用于以下目的的ClientValidationFunction属性:
<asp:CustomValidator ControlToValidate="Text1" ClientValidationFunction="onValidate" /> <script type='text/javascript'> function onValidate(validatorSpan, eventArgs) { eventArgs.IsValid = (eventArgs.Value.length > 0); if (!eventArgs.IsValid) highlight(validatorSpan); } </script>