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

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

是的,它是,但你必须制作你想要创建的对象的平面版本,因为只有在MVC将数据转换为模型后才运行属性validation。 当你的值为int时,如果用户没有输入int,将无法validation,并且您将获得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; } } 

意识到这已经得到了解答,但Stefanvds的回答是不成功的。 只需使用内置validation属性的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; } 

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

积极的int:

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

负int:

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

任何int:

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

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