ValidationSummary显示重复的消息

Buh*_*ica 3 asp.net-mvc validationsummary

如果两个文本框一次验证失败,则ValidationSummary会两次显示相同的消息.

难道我做错了什么?或者是否有一个设置我可以更改以隐藏重复的消息?

 

我把它分解为最简单的例子:

视图:

@model MyModel
@Html.ValidationSummary()
@Html.TextBoxFor(model => model.A)
@Html.TextBoxFor(model => model.B)
Run Code Online (Sandbox Code Playgroud)

模型:

public class MyModel : IValidatableObject
{
    public int A { get; set; }
    public int B { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        //Some logic goes here.        
        yield return new ValidationResult("Validation failed", new[] { "A", "B" });
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

rou*_*uen 8

从ValidationSummary的角度来看,它们并不重复 - 您要将模型状态错误分配给字段A和B,因此验证摘要中必定存在2个错误.它并不"知道"它们是相同的.

简易解决方案

  • 仅将模型分配给其中一个
  • 从摘要中排除属性分配的错误 - Html.ValidationSummary(true)

更难解决的问题:

  • 制作自己的ValidationSummary助手,在其中调用标准验证摘要逻辑,然后以"select distinct"方式过滤结果(linq是你的朋友).

编辑:

像这样的东西,例如:

public static class ValidationExtensions
{
    public static MvcHtmlString FilteredValidationSummary(this HtmlHelper html)
    {
        // do some filtering on html.ViewData.ModelState 
        return System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(html);
    }
}
Run Code Online (Sandbox Code Playgroud)