@ Html.ValidationSummary() - 如何设置错误消息的顺序

时间:2015-06-11 19:13:55

标签: asp.net-mvc validationsummary

我有三个表单元素。我们称之为RadioA,RadioB和Dropdown。在模型中,它们按该顺序创建,并按顺序显示在视图中,并根据需要指定,每个都有唯一的错误消息。然后在视图中,我使用:

@Html.ValidationSummary()

但是错误消息又回来了:

  • 需要下拉
  • 需要RadioA
  • RadioB是必需的

On this thread,我知道我们真的无法控制这些错误消息的返回顺序。一些人提出了如何破解这个问题的建议,但我无法让他们中的任何一个工作。

有什么想法吗?我应该只使用jQuery并以老式的方式验证每个表单项吗?

2 个答案:

答案 0 :(得分:2)

我的立场得到了纠正。 mhapps提供的答案就像一个魅力。这是最后的答案。我引用他的话:

我遇到了这个问题,为了快速解决这个问题,我重新创建了上面的验证摘要,并使用ViewBag通过引用有序字段名称数组以正确的顺序存储错误。不是特别好,但我当时想到的最快的事情。剃刀/ MVC3。

控制器代码:

List<string> fieldOrder = new List<string>(new string[] { 
"Firstname", "Surname", "Telephone", "Mobile", "EmailAddress" })
.Select(f => f.ToLower()).ToList();

ViewBag.SortedErrors = ModelState
   .Select(m => new { Order = fieldOrder.IndexOf(m.Key.ToLower()), Error = m.Value})
   .OrderBy(m => m.Order)
   .SelectMany(m => m.Error.Errors.Select(e => e.ErrorMessage))
   .ToArray();

然后在视图中:

@if (!ViewData.ModelState.IsValid)
{
    <div class="validation-summary-errors">  
    <ul>
        @foreach (string sortedError in ViewBag.SortedErrors)
        {
            <li>@sortedError</li> 
        }
    </ul>
    </div>
}

答案 1 :(得分:1)

我认为更好的方法是按照您希望显示验证消息的顺序对模型中的属性进行排序:

public class Ingredients
{
    [Required]
    public string Vegetable { get; set; }
    [Required]
    public string Starch { get; set; }
    [Required]
    public string Meat { get; set; }
    [Required]
    public string Fruit { get; set; }
  }

这将按以下顺序显示消息:

  • 蔬菜田是必需的。
  • Starch字段是必需的。
  • 肉类领域是必需的。
  • 水果田是必需的。