繁体   English   中英

ASP.NET MVC自定义验证

[英]ASP.NET MVC Custom Validation

我创建了一个简单的自定义验证,以确保输入的时间采用12小时格式,并且文本输入中设置了“ 99:99”掩码,因此我将得到:

12:00

验证在服务器上的效果很好:

     private ValidationResult ValidateTwelveHourFormat(string time, ValidationContext validationContext)
    {
        if (String.IsNullOrWhiteSpace(time.Substring(0, 1))
            || Convert.ToInt32(time.Substring(0, 1)) > 1
            || Convert.ToInt32(time.Substring(1, 1)) > 2
            || Convert.ToInt32(time.Substring(3, 1)) > 5)
        {
            return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
        }
        return ValidationResult.Success;
    }

但是,在客户端上进行的相同验证没有达到我期望的方式:

$.validator.unobtrusive.adapters.addSingleVal('timeformat', 'format');
$.validator.addMethod('timeformat', function (value, element, timeformat) {
if (value) {
    if (timeformat == "TwelveHour") {
        if (value.toString().substring(0, 1) == ""
                || value.toString().substring(0, 1) > 1
                || value.toString().substring(1, 1) > 2
                || value.toString().substring(3, 1) > 5) {
            return false;
        }
    }
}
return true;
});

客户端将仅正确验证第一位数字。 因此,如果我输入3,它将触发正常,但不会触发字符串中的任何其他位置。 我在其中引发了一些警报,当我在文本中输入字符时,似乎触发了该方法。 这种行为使我感到困惑,因为我认为这不会在第一次提交表单之前(只有在提交表单之后)触发。 否则,用户在首次输入表单时会看到错误消息,而且我不认为验证方法通常会奏效。

1.)客户端为什么不能正确验证其他字符位置?
2.)为什么客户在尚未提交表格时进行验证?

更新资料

1.)我使用了JavaScript的substr(),因为它的行为类似于C#的String.Substring()。

对于问题2-我将数据注释与mvc框架一起使用。 假设我有一个必填字段。 当我第一次输入该表单时,该字段不会触发模糊验证。 我可以输入废话,删除废话,但不能触发验证。 这就是为什么我很困惑。 似乎与默认行为不同。 我认为像我提到的示例一样,尝试尝试提交后将触发验证。

问题1:

Javascript String.substring()工作方式与C#不同。 第二个参数不是长度,而是结束索引。 http://www.w3schools.com/jsref/jsref_substring.asp

问题2:

根据我的经验,它通常也可以验证onBlur

1.)我的第一个答案是错误的; 我需要再看一遍。

2.)验证对抠像和模糊的检查; 您可以在options对象中将它们都设置为params

onkeyup: false,
onblur: false

为什么不只使用正则表达式验证器,然后让IT人员担心客户端代码。 您可以使用如下形式:

<asp:RegularExpressionValidator ID="revTime" ControlToValidate="txtTime" ValidationExpression="[0]{0,1}[1-9]:[0-5][0-9]|[1][0-2]:[0-5][0-9]" ValidationGroup="x" runat="server" ErrorMessage="Not a valid time." />

如果使用的是AjaxControlToolkit,则可以使用其FitleredTextBoxExtender过滤编辑,如下所示:

<ajaxToolkit:FilteredTextBoxExtender ID="fteTime" runat="server" TargetControlID="txtTime" FilterMode="ValidChars" FilterType="Numbers, Custom" ValidChars=":" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM