我有一个类似下面的模型
public class MyModel : IValidatableObject
{
[DisplayName("Property Name")]
[Range(0, 9999999, ErrorMessage = "Please enter a number between 0 and 9999999")]
public int? PropName { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (this.PropName == null)
{
yield return new ValidationResult("Property Name is NOT entered");
}
}
}
在视图中,
对于案例3,我当然不希望看到来自Validate()方法的消息。即当数据类型出错时,应该从未触发过Validate()方法。
有人可以解释为什么会这样吗?
视图只使用@ Html.ValidationSummary()来显示消息。
答案 0 :(得分:0)
我找不到关于字段验证,字段绑定到值以及Validate
在模型绑定时执行的顺序的文档。但是,我认为在Validate
执行之前字段被绑定到它们的值。因此PropName
中Validate
为空。
这表示以小数形式输入时PropName
的事件顺序为:
您是否尝试过使用RequiredAttribute
代替自定义验证?这意味着您不需要实现IValidatableObject
,而您的代码将变为
public class MyModel
{
[Required]
[DisplayName("Property Name")]
[Range(0, 9999999, ErrorMessage = "Please enter a number between 0 and 9999999")]
public int? PropName { get; set; }
}