一时间跨度上asp.net MVC 3客户端验证(Client side validation of

2019-06-24 22:10发布

我需要接受格式一些时间信息“HH:MM”( 无秒 )。 该属性的定义如下:

[DataType(DataType.Time), DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh\:mm}")]
public TimeSpan SomeTimeProperty { get; set; }

服务器端验证按预期工作。 但是,我不能,因为没有客户端的验证规则生成的客户端验证工作。

我怎样才能使它发挥作用?

Answer 1:

我怕你会需要去冤枉路,并为它创建一个自定义的验证属性。

public class TimeSpanValidationAttribute : ValidationAttribute, IClientValidatable
{
    public bool IsValid() {
        // Your IsValid() implementation here
    }

    // IClientValidatable implementation
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new TimeSpanValidationRule("Please specify a valid timespan (hh:mm)", "hh:mm");
        yield return rule;
    }
}

然后,你需要写TimeSpanValidationRule类:

public class TimeSpanValidationRule : ModelClientValidationRule
{
    public TimeSpanValidationRule(string error, string format)
    {
        ErrorMessage = error;
        ValidationType = "timespan";
        ValidationParameters.Add("format", format);
    }
}

这是足以让HTML辅助生成data-val-timespan="Please specify a valid timespan (hh:mm)"data-val-timespan-format="hh:mm"的HTML输入框。

通过增加一个转接器的JavaScript不显眼的验证,为“时间跨度”属性这两个值可以“收获”。 然后它将由其对应的规则(将模拟服务器侧规则)来验证:

$.validator.unobtrusive.adapters.add('timespan', ['format'], function (options) {
    options.rules['timespan'] = {
        format: options.params.format //options.params picked up the extra data-val- params you propagated form the ValidationRule. We are adding them to the rules array.
    };
    if (options.message) { // options.message picked up the message defined in the Rule above
        options.messages['timespan'] = options.message; // we add it to the global messages
    }
});

$.validator.addMethod("timespan", function (value, el, params) {
    // parse the value and return false if not valid and true if valid :)
    // params.format is the format parameter coming from the ValidationRule: "hh:mm" in our case
});


文章来源: Client side validation of a timespan on asp.net mvc 3