Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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
C# 如何在asp.net mvc 2中进行整数模型验证_C#_Asp.net Mvc_Int_Model Validation - Fatal编程技术网

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

C# 如何在asp.net mvc 2中进行整数模型验证,c#,asp.net-mvc,int,model-validation,C#,Asp.net Mvc,Int,Model Validation,我有一份登记表,用户必须输入他们房子的面积。我希望此值仅为整数。是否有一种方法可以使用属性asp.net mvc验证此值?是的,但您必须为要创建的对象创建一个平面版本,因为只有在mvc将数据转换为模型后,才会运行属性验证。当您的值为int时,如果用户没有输入int,将无法验证,并且您将收到一条MVC错误消息而不是errormessage 你能把你想做的东西贴出来吗 对于平面版本,我的意思是所有日期时间和整数都是平面版本中的stings 然后我用这个: [DisplayName("Squa

我有一份登记表,用户必须输入他们房子的面积。我希望此值仅为整数。是否有一种方法可以使用属性asp.net mvc验证此值?

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

你能把你想做的东西贴出来吗

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

然后我用这个:

    [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;

    }
}
如果我的modelstate是有效的,那么我使用AutoMapper将我的FlatModel转换为我的模型,这仅仅是两行代码

编辑:如果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;
    }
}

意识到这一点已经得到了回答,但Stefanvds的回答却过于复杂。只需使用MVCs内置的验证属性:

[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; }

我通常使用的范围属性如下所示:

正整数:

[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; }

如果你有一些像“a”这样的字母,那么对
int
字段使用
Range
将不起作用

未调用错误
处理程序
(ASP.NET CORE 1.0 RC2)

对不起。麻烦的是,我早该知道的。只是有个大脑屁为什么不用decimal.TryParse之类的?这样,您可以支持更多的数字类型,而不仅仅是整数。对于范围,系统有一条错误消息“字段XXX必须在XXX和XXX之间。”因此错误消息是可选的是,您是正确的。但是定制的ErrorMessage比“字段平方英尺必须介于0和2147483647之间”更方便用户至少在MVC2中,如果传入的数据不是有效的整数,则这不起作用。框架将传入默认值0,验证将成功,但稍后当框架实际实例化模型并发现无法将数据转换为整数时,验证将失败。此时会显示默认错误消息。在这里使用正则表达式要容易得多:零-不是正整数。