0

在 MVC 3 razor 中似乎有 2 个选项:

在验证摘要中显示各种属性的所有错误

@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")]

这可能吗?

4

1 回答 1

0

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

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)但是,您的代码应该可以按预期工作,请考虑如果对象的属性中没有错误,则会触发验证接口方法。这是验证检查的默认顺序:

  • 属性属性
  • 类属性
  • 验证接口

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

于 2012-04-11T20:08:25.100 回答