DataAnnotations DisplayAttributes Order属性在MVC中不起作用

时间:2019-01-24 23:43:42

标签: c# model-view-controller attributes data-annotations modelattribute

我正在模型对象中设置DataAnnotations DisplayAttributes Order属性的值。但是,它似乎不起作用。

我使用的是.Net Framework 4.7和MVC5。按照下面的链接,它应该可以工作。

https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.displayattribute.order?view=netframework-4.7.2

    [Required(ErrorMessage = "Case is required.")]
    [Display(Name = "Case", Order = -98)]
    public int CaseId { get; set; }

    [Required(ErrorMessage = "Phase is required.")]
    [Display(Name = "Phase", Order = -99)]
    public int PhaseId { get; set; }

由于默认的订单权重是0,所以我使用负值将其设置为所需的顺序。不管我指定什么订单权重,验证消息始终按照模型中属性声明的顺序显示。

有什么建议或建议吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

DisplayAttribute控制显示中列的顺序,而不是验证消息的顺序。

您可以尝试按照Display error message on the view from controller asp.net mvc 5

中的说明将错误消息放在控件旁边。

答案 1 :(得分:0)

这有助于重新排列错误消息的顺序。

@Html.ValidationSummary() - how to set order of error messages

控制器代码:

   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>
}

希望这对其他人有帮助。 谢谢!