如何仅在验证摘要(MVC3)中显示某些错误消息

时间:2012-04-10 22:59:42

标签: asp.net-mvc asp.net-mvc-3 validation razor

在MVC 3剃须刀中,似乎有两种选择:

在验证摘要

中显示各种属性的所有错误
@Html.ValidationSummary(false)

或显示属性本身旁边的错误

@Html.ValidationSummary(true)

但我希望只有某些属性才能在验证摘要中显示错误,(从我的验证覆盖返回的错误消息,例如)

    public IEnumerable<ValidationResult> Validate(ValidationContext context)
    {
        if (string.IsNullOrWhiteSpace(HomePhoneNumber) && string.IsNullOrWhiteSpace(WorkPhoneNumber) && string.IsNullOrWhiteSpace(MobileNumber) && string.IsNullOrWhiteSpace(FaxNumber))
        {
            yield return new ValidationResult("Please fill in at least one of the phone fields with a phone number");
        }
    }

和其他更简单的验证,让它们旁边显示错误信息,如模型所定义,例如

 [Required(ErrorMessage = "Please fill in your full name")]

这可能吗?

1 个答案:

答案 0 :(得分:0)

有可能。  ValidationSummary()显示string.empty的ModelErrors作为键。 以下是示例代码:

IList<ValidationResult> validationResults = Validate();

if (validationResults != null) {
    foreach (var validationResult in validationResults) {
        ModelState.AddModelError(String.Empty, validationResult.ErrorMessage);
    }
}

在视图中:

@Html.ValidationSummary(true)

修改

以上是ValidationSummery帮助程序如何处理非属性(对象)级别消息的示例。

但是,您的代码应该按预期工作,如果对象的属性中没有错误,请考虑触发验证接口方法IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)。以下是验证检查的默认顺序:

  • 属性属性
  • 类属性
  • 验证界面

如果任何步骤失败,它将立即返回而不进一步检查。 如果启用了不显眼的客户端验证,则应在客户端触发基于属性的验证。然后验证接口将在模型绑定期间触发。