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

发布于 2024-09-15 18:41:57 字数 69 浏览 6 评论 0原文

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

I have a registration form and the user must enter the square footage of their house. I would like this value to be only an integer. Is there a way to validate this value using attributes asp.net mvc?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

那片花海 2024-09-22 18:41:57

意识到这个问题已经得到了回答,但 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; }

Realise this has already been answered, but Stefanvds' answer is uneccessarily complicated. Just use MVCs built in validation attributes:

[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; }
何止钟意 2024-09-22 18:41:57

是的,确实如此,但您必须制作要创建的对象的平面版本,因为属性验证仅在 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;
    }
}

yes, it is, but you will have to make a flat version of the object you are wanting to create, because the validation with attributes only runs AFTER MVC has converted your data into the model. which, when your value is an int, will fail to validate if the user did not enter an int, and you will get a MVC error message in stead of your errormessage.

can you post the object you are wanting to make?

with a flat version i mean all datetimes and ints are stings in the flat version.

then i use this:

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

in the same file

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;

    }
}

if my modelstate is valid then, i use AutoMapper to convert my FlatModel into my Model, which is just 2 lines of code.

edit: if 0 is a valid number:

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;
    }
}
送君千里 2024-09-22 18:41:57

我通常使用这样的 range 属性:

Positive int:

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

Negative int:

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

Any int:

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

I usually use the range attribute like this:

Positive int:

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

Negative int:

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

Any int:

[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文