Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MVC4 jQuery不引人注目地验证最小值_Jquery_Asp.net Mvc_Validation_Asp.net Mvc 4_Unobtrusive Validation - Fatal编程技术网

MVC4 jQuery不引人注目地验证最小值

MVC4 jQuery不引人注目地验证最小值,jquery,asp.net-mvc,validation,asp.net-mvc-4,unobtrusive-validation,Jquery,Asp.net Mvc,Validation,Asp.net Mvc 4,Unobtrusive Validation,我有一个自定义的MinAttribute我想用来验证用户输入是否大于给定值 我已经能够在服务器端实现它,但无法使用不引人注目的验证使它在客户端工作 我的模型: [Required(ErrorMessage = "{0} is Required.")] [Display(Name = "Total")] [Min(25, ErrorMessage = "You need to enter at least 25")] [DataType(DataType.Currency)] public Dec

我有一个自定义的
MinAttribute
我想用来验证用户输入是否大于给定值

我已经能够在服务器端实现它,但无法使用不引人注目的验证使它在客户端工作

我的模型:

[Required(ErrorMessage = "{0} is Required.")]
[Display(Name = "Total")]
[Min(25, ErrorMessage = "You need to enter at least 25")]
[DataType(DataType.Currency)]
public Decimal Total{ get; set; }
C.cs:

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public class MinAttribute : ValidationAttribute, IClientValidatable
{
    private decimal MinValue { get; set; }

    public MinAttribute(int minValue)
    {
        MinValue = minValue;
    }
    public override bool IsValid(object value)
    {
        if (value != null)
        {
            if (value is decimal)
            {
                if ((decimal)value >= MinValue)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        return true;
    }

    public override string FormatErrorMessage(string name)
    {
        if (this.ErrorMessage.IsNullOrEmpty())
            return string.Format("{0} must be greater than or equal to {1}", name, MinValue);
        else
            return this.ErrorMessage;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (IsValid(value))
        {
            return ValidationResult.Success;
        }
        else
        {
            var errorMsg = FormatErrorMessage(validationContext.DisplayName);
            return new ValidationResult(errorMsg);
        }
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        yield return new ModelClientValidationRule
        {
            ErrorMessage = this.ErrorMessage,
            ValidationType = "min"
        };
    }

}

但是我们无法让它正常工作

我有什么明显做错的吗

从视图输出的html包括所有必要的
数据-
属性:

<input class="input text valid" data-val="true" data-val-min="You need to enter at least 25" data-val-number="The field Total must be a number." data-val-required="Total is Required." id="Total" maxlength="7" name="Total" style="width:125px;" type="tel" value="0">

所以jQuery实现一定是出了问题。 我已经包括了对js文件的适当引用,因为不引人注目的验证正在其他字段上进行

谢谢

我也乐于接受更好的方法来实现这一点。我没有使用范围,因为我希望最小值和最大值有不同的错误消息,而不是通用的“必须在X和Y之间”
我也尝试过使用
validator.unobtrusive.adapters.addMinMax()
,但找不到任何关于如何使用它的详细文档,因此无法使其正常工作。

如果您查看jquery.validate.unobtrusive(.min).js,您将看到:

adapters.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range");

换句话说,已经有一个名为“min”的适配器。您尝试过使用其他名称吗?

我将所有
Min
s更改为
Mini
,因此model attribute是
Mini
类是
Mini attribute
更新了JS以使用
Mini
,但仍在做同样的事情。没有chrome控制台错误,只是没有验证客户端。实际上,现有适配器名为“长度”和“范围”,范围适配器使用“最小”和“最大”属性来定义允许的范围。排除明显的错误:确保输入元素位于表单中,并将其类型设置为text。我检查了输入,并将其从
tel
type更改为text,重新尝试了上述所有组合,但仍然不起作用。当然,有一种更简单的方法来验证最小/最大值客户端。。
<input class="input text valid" data-val="true" data-val-min="You need to enter at least 25" data-val-number="The field Total must be a number." data-val-required="Total is Required." id="Total" maxlength="7" name="Total" style="width:125px;" type="tel" value="0">
adapters.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range");