23

我有一个注册表,用户必须输入他们房子的平方英尺。我希望这个值只是一个整数。有没有办法使用属性 asp.net mvc 验证这个值?

4

4 回答 4

72

意识到这已经得到了回答,但 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; }
于 2011-09-13T11:06:48.777 回答
27

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

你能发布你想做的对象吗?

对于平面版本,我的意思是所有日期时间和整数都是平面版本中的刺痛。

然后我用这个:

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

在同一个文件中

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;

    }
}

如果我的模型状态有效,我使用 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;
    }
}
于 2010-08-23T14:12:37.263 回答
10

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

正整数:

[Range(0,int.MaxValue)]
public int Id { get; set; }

负整数:

[Range(int.MinValue,-1)]
public int Id { get; set; }

任何整数:

[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
于 2016-01-11T04:26:38.757 回答
-2

Range如果您有一些像“a”这样的字母,那么使用int字段将不起作用。未调用
错误(ASP.NET CORE 1.0 RC2)。Handler

于 2016-07-08T07:53:03.090 回答