Я использую ненавязчивый метод jquery для проверки моих моделей в пользовательском интерфейсе. У меня есть числовое поле в модели, которое я хочу проверить как число. Из коробки это почти правильно работает. Сбой на стороне клиента при проверке 0,33 против 0,33. Я знаю, что могу изменить регулярное выражение в плагине проверки jquery, но это не кажется идеальным.
Итак, чтобы попытаться исправить проблему, не изменяя сам плагин, я создал следующий атрибут проверки:
public class DecimalValidator : System.ComponentModel.DataAnnotations.ValidationAttribute, System.Web.Mvc.IClientValidatable
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
decimal val = 0;
ValidationResult ret = new ValidationResult("Must be a valid decimal");
if (decimal.TryParse(value.ToString(), out val) )
return ValidationResult.Success;
else
return ret;
}
#region IClientValidatable Members
public System.Collections.Generic.IEnumerable<System.Web.Mvc.ModelClientValidationRule> GetClientValidationRules(System.Web.Mvc.ModelMetadata metadata, System.Web.Mvc.ControllerContext context)
{
List<System.Web.Mvc.ModelClientValidationRule> ret = new List<System.Web.Mvc.ModelClientValidationRule>();
System.Web.Mvc.ModelClientValidationRule validDecimalRule = new System.Web.Mvc.ModelClientValidationRule
{
ErrorMessage = "Please enter a valid decimal.",
ValidationType = "decimal"
};
ret.Add(validDecimalRule);
return ret;
}
#endregion
}
И применил это так:
/// <summary>
/// The price per unit.
/// </summary>
[Range(0, double.MaxValue)]
[Display(Name = "Price")]
[DecimalValidator]
public decimal UnitPrice { get; set; }
Проблема в том, что HTML по-прежнему отображается с
data-val-number = "Поле Price должно быть числом."
в дополнение к новому,
data-val-decimal = "Пожалуйста, введите действительное десятичное число."
Как сохранить атрибуты проверки по умолчанию от визуализации?