【发布时间】:2011-04-02 16:12:18
【问题描述】:
我有一个注册表单,用户必须输入他们房子的面积。我希望这个值只是一个整数。有没有办法使用属性 asp.net mvc 来验证这个值?
【问题讨论】:
-
在这里使用正则表达式更容易:stackoverflow.com/questions/5661569/…
标签: c# asp.net-mvc int model-validation
我有一个注册表单,用户必须输入他们房子的面积。我希望这个值只是一个整数。有没有办法使用属性 asp.net mvc 来验证这个值?
【问题讨论】:
标签: c# asp.net-mvc int model-validation
意识到这已经得到了回答,但 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; }
【讨论】:
是的,是的,但是您必须制作要创建的对象的平面版本,因为属性验证仅在 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;
}
}
【讨论】:
我通常这样使用范围属性:
正整数:
[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”这样的字母,那么使用Range 作为int 字段将不起作用。
未调用错误 Handler (ASP.NET CORE 1.0 RC2)。
【讨论】: