我有一张注册表,用户必须输入他们房子的面积。我希望这个值只是一个整数。有没有办法使用asp.net mvc属性验证这个值?
答案 0 :(得分: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; }
答案 1 :(得分:26)
你可以发布想要制作的对象吗?
平面版本我的意思是所有日期时间和整数都是平面版本中的叮咬。
然后我用这个:
[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;
}
}
答案 2 :(得分:7)
我通常使用这样的范围属性:
积极的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; }
答案 3 :(得分:-1)
如果你有一些像“a”这样的字母,那么使用Range
int
字段就行不通了。
不调用错误Handler
(ASP.NET CORE 1.0 RC2)。