【问题标题】:How to make only certain Error Messages appear in the Validation Summary (MVC3)如何使验证摘要中仅显示某些错误消息 (MVC3)
【发布时间】:2012-04-10 22:59:41
【问题描述】:

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

这可能吗?

【问题讨论】:

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


    【解决方案1】:

    这是可能的。 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&lt;ValidationResult&gt; IValidatableObject.Validate(ValidationContext validationContext)。这是验证检查的默认顺序:

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

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

    【讨论】:

    • 其次:不应该使用 ValidationContext 参数调用 Validate 吗?鉴于接口需要这样实现。
    • 是的,通常在控制器中。
    • 抱歉,我关注的是 ValidationSummery 助手,它如何处理非属性(对象)级别的消息。我已经更新了答案。
    • 抱歉,我仍然很难让这个工作,因为它必须通过 ValidationContext,我不确定如何做到这一点。
    • 我不断收到“无法解析符号'验证'” - 无论我把它放在控制器中的什么地方。我也尝试过访问模型中的 validationResults 列表(因为我已经覆盖了 Validate 方法),但我也无法让它工作。该代码似乎工作......我只是无法填充validationResults
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    相关资源
    最近更新 更多