Свойство DataAnnotations DisplayAttributes Order не работает в MVC

Я устанавливаю значения для свойства DataAnnotations DisplayAttributes Order в объекте моей модели. Однако, похоже, это не работает.

Я использую .Net Framework 4.7 и MVC 5. Согласно приведенной ниже ссылке, это должно работать.

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, я использовал отрицательные значения, чтобы установить его в нужном мне порядке. Независимо от того, какой вес заказа я укажу, сообщения проверки всегда отображаются в порядке объявления свойства в модели.

Любые предложения или материалы, пожалуйста?

Заранее спасибо.


person Neelima Ediga    schedule 24.01.2019    source источник
comment
Это решается? у меня такая же проблема   -  person PsyDuck    schedule 25.04.2021


Ответы (2)


DisplayAttribute управляет порядком столбцов на дисплее, а не порядком сообщений проверки.

Вы можете попробовать поместить сообщения об ошибках рядом с элементами управления, как описано в Отображать сообщение об ошибке в представлении контроллера asp.net mvc 5

person sjb-sjb    schedule 25.01.2019
comment
Ок, понял. Но для ссылки, я не думаю, что это полезно в моем случае. Спасибо за вашу помощь. - person Neelima Ediga; 25.01.2019
comment
Что вы можете сделать, так это использовать отражение для перебора свойств, получить атрибут Display от каждого из них и посмотреть на свойство Order атрибута. Затем вы можете отсортировать сообщения об ошибках с этим. - person sjb-sjb; 05.02.2019

Это помогло изменить порядок сообщений об ошибках.

@Html.ValidationSummary() - как установить порядок сообщений об ошибках

Код контроллера:

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

Надеюсь, это поможет кому-то другому. Спасибо!

person Neelima Ediga    schedule 25.01.2019