如果您使用客户端 jQuery 验证,这是新的 ASP.NET MVC 和 Webforms 项目中的默认设置,那么您已经拥有 HTML 中所需的属性。
例如看看 ASP.NET Webforms 中的以下代码:
<div class="col-md-10">
<asp:TextBox runat="server" ID="TextBox1" CssClass="form-control" TextMode="Email" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
CssClass="text-danger" ErrorMessage="The email field is required." />
<asp:RegularExpressionValidator runat="server" ControlToValidate="Email"
CssClass="text-danger" ErrorMessage="The email is not valid" />
</div>
此代码为验证器生成一个文本框输入字段和两个同级 span HTML 元素,对应的 data attributes 标识验证器类型、要执行的验证函数等。
所以所需验证器的输出是:
<span data-val-evaluationfunction="RequiredFieldValidatorEvaluateIsValid" data-val-initialvalue="" data-val="true" data-val-errormessage="The email field is required." data-val-controltovalidate="MainContent_Email"></span>
对于正则表达式验证器,它是:
<span data-val-evaluationfunction="RegularExpressionValidatorEvaluateIsValid" data-val="true" data-val-errormessage="The email field is required." data-val-controltovalidate="MainContent_Email"></span>
为简单起见,我省略了一些输出细节。
因此,您可以只使用 ASP.NET 输出的现有数据属性并在您的 javascript 代码中解释它们。
事实上Page_Validators 数组已经包含该数据。所以你可以这样做:
switch(Page_Validators[i].evaluationfunction.name){
case "RequiredFieldValidatorEvaluateIsValid":
// do stuff for required field validators
break;
case "CustomValidatorEvaluateIsValid":
// do stuff for custom validators
break;
case "RegularExpressionValidatorEvaluateIsValid":
// do stuff for regex validators
break;
case "CompareValidatorEvaluateIsValid":
// do stuff for compare validators
break;
}