我经常使用也是必填字段的正则表达式验证器。这导致页面上看起来像冗余控件。正则表达式验证器没有“必需”属性,这意味着我需要另一个控件。像这样:
<asp:TextBox ID="tbCreditCardNumber" runat="server" Width="200"></asp:TextBox>
<asp:RegularExpressionValidator ID="revCreditCardNumber" runat="server"
ControlToValidate="tbCreditCardNumber" ValidationGroup="CheckoutGroup" ErrorMessage="Invalid Credit Card Number!"
ValidationExpression="^(3[47][0-9]{13}|5[1-5][0-9]{14}|4[0-9]{12}(?:[0-9]{3})?)$">*</asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="rfvCreditCardNumber" runat='server' ControlToValidate="tbCreditCardNumber" ValidationGroup="CheckoutGroup"
ErrorMessage="Credit Card Number Required">*</asp:RequiredFieldValidator>
有没有办法合并两个控件,所以我不必输入这么多代码?
答案 0 :(得分:6)
一个常见的问题是,验证器组件在未显示时仍然占用空间,如果您有多个,则看起来很奇怪,即最后一个被触发,留下较大的间隙到星号或其他错误标记。这可以通过添加:
轻松解决display="Dynamic"
...给验证员。
但是它并没有解决同时发生多次触发的问题,它仍然会连续显示许多验证器错误。然后,自定义验证器可能是最佳解决方案。
答案 1 :(得分:3)
您可以结合使用功能来滚动自己的CustomValidator。除此之外,不是我不知道的。
答案 2 :(得分:1)
您可以覆盖 EvaluateIsValid 方法
public class RegularExpressionValidatorEx : RegularExpressionValidator
{
protected override bool EvaluateIsValid()
{
string controlValidationValue = base.GetControlValidationValue(base.ControlToValidate);
if ((controlValidationValue == null) || (controlValidationValue.Trim().Length == 0))
{
return false;
}
return base.EvaluateIsValid();
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
Page.ClientScript.RegisterStartupScript(GetType(), "customVal", ClientID + @".evaluationfunction = function(val){
var value = ValidatorGetValue(val.controltovalidate);
if (ValidatorTrim(value).length == 0)
return false;
return RegularExpressionValidatorEvaluateIsValid(val);}", true);
}
}
答案 3 :(得分:0)
更具体地说,您需要将CustomValdiator的ValidateEmptyMessage属性设置为true,否则他将不会验证emprty输入字段。例如:
<script type="text/javascript">
function clientValidate(sender, args){
if (args.Value.length == 0) {
args.IsValid = false;
}
}
</script>
<asp:CustomValidator runat="server"
ID="CustomValidator"
ControlToValidate="TextBox1"
ClientValidationFunction="clientValidate"
ValidateEmptyText="true"
Text="Error!">
</asp:CustomValidator>
但是,正如您所看到的,这绝不比您以前的代码短,所以如果由我决定,在这种情况下使用自定义验证器有没有意义。至于原始问题,遗憾的是没有办法让默认的RegExpressValidator验证空输入字段。