【发布时间】:2011-12-12 17:13:48
【问题描述】:
我正在使用 jquery 不显眼的方法在 UI 中验证我的模型。我在模型中有一个数字字段,我想将其验证为数字。开箱即用,它几乎可以正常工作。在验证 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="价格字段必须是数字。" 除了新的, data-val-decimal="请输入有效的小数。"
如何防止呈现默认验证属性?
【问题讨论】:
标签: javascript jquery model-view-controller validation