Asp.net mvc 2 ASP.NET MVC 2数值验证

Asp.net mvc 2 ASP.NET MVC 2数值验证,asp.net-mvc-2,data-annotations,Asp.net Mvc 2,Data Annotations,我在一个类上有这个属性: public virtual decimal? Number { get; set; } 当我在表单上使用它时,MVC会自动验证它。如果用户输入一封信,自然会返回一个错误: “值“D”对数字无效。” 如何更改此类错误消息,甚至控制该行为?我没有找到相关属性或类似的东西 谢谢大家! 它实际上不是从模型验证中派生出来的消息。当模型绑定器无法将输入值转换为绑定属性的值类型时,消息将添加到模型状态。例如,当绑定属性为整数且用户在该属性的输入字段中输入了非数字字符时,可能会发生

我在一个类上有这个属性:

public virtual decimal? Number { get; set; }
当我在表单上使用它时,MVC会自动验证它。如果用户输入一封信,自然会返回一个错误:

“值“D”对数字无效。”

如何更改此类错误消息,甚至控制该行为?我没有找到相关属性或类似的东西


谢谢大家!

它实际上不是从模型验证中派生出来的消息。当模型绑定器无法将输入值转换为绑定属性的值类型时,消息将添加到模型状态。例如,当绑定属性为整数且用户在该属性的输入字段中输入了非数字字符时,可能会发生这种情况

不幸的是,要覆盖消息,您必须以“硬”的方式进行,即扩展DefaultModelBinder类并覆盖SetProperty方法。以下是一个例子:

public class MyModelBinder: DefaultModelBinder
{
    public MyModelBinder()
    {
    }

    protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
    {
        string key = bindingContext.ModelName + "." + propertyDescriptor.Name;
        if (bindingContext.ModelState[key] != null)
        {

            foreach (ModelError error in bindingContext.ModelState[key].Errors)
            {
                if (IsFormatException(error.Exception))
                {
                    bindingContext.ModelState[key].Errors.Remove(error);
                    bindingContext.ModelState[key].Errors.Add(string.Format("My message for {0}.", propertyDescriptor.DisplayName));
                    break;
                }
            }
        }
        base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
    }

    private bool IsFormatException(Exception e)
    {
        while (e != null)
        {
            if (e is FormatException)
            {
                return true;
            }
            e = e.InnerException;
        }
        return false;
    }
}

简单使用给定的范围验证器funda,您将得到您想要的

对于任何数字验证,必须根据您的要求使用不同的范围验证:

对于整数

[Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")]
浮球

[Range(0, float.MaxValue, ErrorMessage = "Please enter valid float Number")]
双倍

[Range(0, double.MaxValue, ErrorMessage = "Please enter valid doubleNumber")]

@感谢您的编辑。这将更容易理解。但它是否有用?