如何在日期字符串模型属性上进行客户端验证
How to get client side validation on a date string model property
在我的模型中,我有一个包含日期属性的对象。 (使用字符串是因为那是以前的程序员写的):
[Display(Name = "Payment Date")]
[Date(ErrorMessage = "Please enter a valid date")]
public string PaymentDate { get; set; }
这是 PaymentDate
使用的自定义日期属性:
public sealed class DateAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
var dateString = value as string;
if (string.IsNullOrWhiteSpace(dateString))
{
return false;
}
DateTime result;
var success = DateTime.TryParse(dateString, out result);
return success;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
return new ModelClientValidationRule[] { new ModelClientValidationRule
{
ValidationType = "paymentdate",
ErrorMessage = this.ErrorMessage }
};
}
}
这在服务器端很有效,但在客户端却不行。
在视图中,我尝试创建一个自定义函数来进行验证,但它似乎无法正常工作。 test
前的点导致语法错误
// custom jquery validation method
jQuery.validator.addMethod('validDate', function (value, element, params) {
return Invalid|NaN/.test(new Date(value));
}, '');
// unobtrusive adapter
jQuery.validator.unobtrusive.adapters.add('paymentdate', {}, function (options) {
options.rules['validDate'] = true;
options.messages['validDate'] = options.message;
});
如何让客户端验证与我已经在工作的服务器端验证一起工作?
注意:我使用的是自定义属性,因为稍后会添加一些自定义验证。
jQuery.validator.addMehod('validDate', function (value, element, params) {
return Invalid|NaN/.test(new Date(value));
}, '');
和
jQuery.validator.addMethod('validDate', function (value, element, params) {
return Invalid|NaN/.test(new Date(value));
}, '');
看起来您在函数中缺少一个 t。
抛出语法错误是因为正则表达式无效,需要在开头加一个/
/Invalid|NaN/.test(...)
但是,我要指出几件事。
- 建议您在解析日期字符串时使用Date.parse
- 检查
NaN
时最好使用isNaN函数
这是验证器的修订版
jQuery.validator.addMethod('validDate', function (value, element, params) {
return !isNaN(Date.parse(value));
}, '');
在我的模型中,我有一个包含日期属性的对象。 (使用字符串是因为那是以前的程序员写的):
[Display(Name = "Payment Date")]
[Date(ErrorMessage = "Please enter a valid date")]
public string PaymentDate { get; set; }
这是 PaymentDate
使用的自定义日期属性:
public sealed class DateAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
var dateString = value as string;
if (string.IsNullOrWhiteSpace(dateString))
{
return false;
}
DateTime result;
var success = DateTime.TryParse(dateString, out result);
return success;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
return new ModelClientValidationRule[] { new ModelClientValidationRule
{
ValidationType = "paymentdate",
ErrorMessage = this.ErrorMessage }
};
}
}
这在服务器端很有效,但在客户端却不行。
在视图中,我尝试创建一个自定义函数来进行验证,但它似乎无法正常工作。 test
// custom jquery validation method
jQuery.validator.addMethod('validDate', function (value, element, params) {
return Invalid|NaN/.test(new Date(value));
}, '');
// unobtrusive adapter
jQuery.validator.unobtrusive.adapters.add('paymentdate', {}, function (options) {
options.rules['validDate'] = true;
options.messages['validDate'] = options.message;
});
如何让客户端验证与我已经在工作的服务器端验证一起工作?
注意:我使用的是自定义属性,因为稍后会添加一些自定义验证。
jQuery.validator.addMehod('validDate', function (value, element, params) {
return Invalid|NaN/.test(new Date(value));
}, '');
和
jQuery.validator.addMethod('validDate', function (value, element, params) {
return Invalid|NaN/.test(new Date(value));
}, '');
看起来您在函数中缺少一个 t。
抛出语法错误是因为正则表达式无效,需要在开头加一个/
/Invalid|NaN/.test(...)
但是,我要指出几件事。
- 建议您在解析日期字符串时使用Date.parse
- 检查
NaN
时最好使用isNaN函数
这是验证器的修订版
jQuery.validator.addMethod('validDate', function (value, element, params) {
return !isNaN(Date.parse(value));
}, '');