MVC 4 视图模型验证属性 - 字符串长度 - 错误

MVC 4 view model validation attribute - string length - error

我在具有 StringLength 验证属性的 MVC5 视图模型上有这个 属性:

        [Required]
        [StringLength(4, MinimumLength = 4, ErrorMessage = "The postcodes must be 4 characters long.")]
        [Display(Name = "Postcode (four digits)")]
        public int Postcode { get; set; }

客户端验证有效,但是当我通过提交表单执行操作时出现此错误:

Unable to cast object of type 'System.Int32' to type 'System.String'. 

我知道是属性导致的,因为当我注释掉 [StringLength] 属性时一切正常。

我怀疑这与属性类型是int有关。但是如何指定整数属性的字符串长度验证?将字符串类型放入 ViewModel 然后在控制器中将其解析为 int 是最好的解决方案还是有一个属性?在属性驱动的解决方案会很好。

编辑:我尝试了 [DataType(DataType.PostalCode)] 但它没有用。

谢谢。

DataType 属性不能用于验证用户输入。它们仅提供使用模板化助手呈现值的提示。

范围是对 int 的完美验证。

[Required]
[Range(1000,9999, ErrorMessage="The postcodes must be 4 characters long.")]  
[Display(Name = "Postcode (four digits)")]
public int Postcode { get; set; }

int使用范围,字符串使用字符串长度,不能将字符串长度转换为int。 [DataType(DataType.PostalCode)] 仅适用于字符串。对于邮政编码,您可以做一些事情。

我建议把它变成一个字符串。

我会用 RegularExpression 将它变成一个字符串:

        [Required(ErrorMessage = "Postal Code is Required")]
        [DataType(DataType.PostalCode)]
        [RegularExpression(@"^\d{5}(-\d{4})?$", ErrorMessage = "Postal Code Invalid.")]
        [Display(Name = "Postcode (four digits)")]
        public string Postcode { get; set; }