我有一个注册表,用户必须进入他们房屋的平方英尺。我希望这个价值只是一个整数。有没有办法使用属性ASP.NET MVC验证此值?

有帮助吗?

解决方案

是的,是的,但是您必须制作要创建的对象的平面版本,因为使用属性的验证仅在MVC将数据转换为模型之后运行。如果您的值为INT,则如果用户未输入INT,则将无法验证,并且您将获得MVC错误消息,而不是您的errormessage。

您可以发布要制作的对象吗?

使用平面版本,我的意思是所有的数据和ints都在平面版本中。

然后我使用这个:

    [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转换为模型,这仅是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的回答并不复杂。只需使用内置验证属性内置的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; }

我通常使用这样的范围属性:

积极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; }

好吧 Rangeint 如果您有一些字母,例如“ a”,字段将无法工作。
错误 Handler 未称为(ASP.NET Core 1.0 RC2)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top