C# 如何在asp.net mvc 2中进行整数模型验证
我有一份登记表,用户必须输入他们房子的面积。我希望此值仅为整数。是否有一种方法可以使用属性asp.net mvc验证此值?是的,但您必须为要创建的对象创建一个平面版本,因为只有在mvc将数据转换为模型后,才会运行属性验证。当您的值为int时,如果用户没有输入int,将无法验证,并且您将收到一条MVC错误消息而不是errormessage 你能把你想做的东西贴出来吗 对于平面版本,我的意思是所有日期时间和整数都是平面版本中的stings 然后我用这个: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
[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,验证将成功,但稍后当框架实际实例化模型并发现无法将数据转换为整数时,验证将失败。此时会显示默认错误消息。在这里使用正则表达式要容易得多:零-不是正整数。