如何在asp.net mvc 2中进行整数模型验证

Luk*_*101 21 c# int asp.net-mvc model-validation

我有一张登记表,用户必须输入他们房子的面积.我希望这个值只是一个整数.有没有办法使用属性asp.net mvc验证此值?

Tom*_*enn 68

意识到这已经得到了回答,但Stefanvds的回答却很复杂.只需使用内置验证属性的MVC:

[DisplayName("Square Feet")]
[Required(ErrorMessage = "Square Feet is Required")]
[Range(0, int.MaxValue, ErrorMessage = "Square Feet must be a positive number")]
public int SquareFeet { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • 是的,你是对的.但是自定义ErrorMessage比以下用户更友好:"字段平方英尺必须介于0和2147483647之间".;) (5认同)

Ste*_*vds 26

是的,它是,但你必须制作你想要创建的对象的平面版本,因为只有在MVC将数据转换为模型后才运行属性验证.当你的值为int时,如果用户没有输入int,将无法验证,并且您将收到MVC错误消息而不是您的错误消息.

你可以发布你想要制作的对象吗?

平面版本我的意思是所有日期时间和整数都是扁平版本中的蜇.

然后我用这个:

    [DisplayName("Square meters")]
    [PosNumberNoZero(ErrorMessage = "need a positive number, bigger than 0")]
    public string squaremeters { get; set; }
Run Code Online (Sandbox Code Playgroud)

在同一个文件中

public class PosNumberNoZeroAttribute : ValidationAttribute {
    public override bool IsValid(object value) {
        if (value == null) {
            return true;
        }
        int getal;
        if (int.TryParse(value.ToString(), out getal)) {

            if (getal == 0)
                return false;

            if (getal > 0)
                return true;
        }
        return false;

    }
}
Run Code Online (Sandbox Code Playgroud)

如果我的模型状态有效,我使用AutoMapper将我的FlatModel转换为我的模型,这只是2行代码.

编辑:如果0是有效数字:

public class PosNumberAttribute : ValidationAttribute {
    public override bool IsValid(object value) {
        if (value == null) {
            return true;
        }
        int getal;
        if (int.TryParse(value.ToString(), out getal)) {

            if (getal >= 0)
                return true;
        }
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)


Zap*_*ica 7

我通常使用这样的范围属性:

积极的int:

[Range(0,int.MaxValue)]
public int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

负int:

[Range(int.MinValue,-1)]
public int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

任何int:

[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • 零 - 不是正整数。 (4认同)