模型验证的自定义范围属性不会生成jQuery验证属性

时间:2012-09-12 13:13:18

标签: asp.net-mvc-3 jquery-validate

在我的项目中,我有一些实例,用户需要以十进制的形式提供一定数量(以磅和便士为单位),并且必须在Int32范围内,以便可以将其转换为数据库。我认为可以这样做:

/// <summary>
/// Range attribute to ensure that entered value can be converted to an int32
/// </summary>
public class PoundsAndPenceAttribute : RangeAttribute
{
    public PoundsAndPenceAttribute(double minimum = (double)int.MinValue / 100, double maximum = (double)int.MaxValue / 100)
        : base(minimum, maximum)
    {
    }
}

不幸的是,它不会产生客户端JavaScript data-val范围属性,尽管它确实在服务器端验证它。有更好的方法可以做到这一点,还是我必须编写自定义验证器?

1 个答案:

答案 0 :(得分:4)

尝试实现IClientValidatable接口:

public class PoundsAndPenceeAttribute : RangeAttribute, IClientValidatable
{
    public LocalizeRange(double minimum = (double)int.MinValue / 100, double maximum = (double)int.MaxValue / 100) 
: base(minimum, maximum)
    {
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = ErrorMessage,
            ValidationType = "range"
        };

        rule.ValidationParameters.Add("min", Minimum);
        rule.ValidationParameters.Add("max", Maximum);

        yield return rule;
    }
}

它应该完成这项工作。