ASP. NET Ошибки проверки базовой модели отображаются в неправильном порядке - PullRequest
1 голос
/ 18 июня 2020

Проблема: Ошибки модели не отображаются в соответствии с определением модели, они отображаются случайным образом.

Это происходит в ASP. NET основном приложении. У меня никогда не было этой проблемы в обычном приложении asp. net mvc.

Есть ли какие-то настройки, которые я должен включить на asp. net основных страницах бритвы? Или я что-то делаю совсем не так. Пожалуйста, помогите.

Отображение пользовательского интерфейса Ошибки отображаются в случайном формате:

  • Требуется DOB
  • Требуется фамилия
  • Требуется EI ID ребенка
  • Требуется имя
  • Требуется школьный округ
  • Требуется дата направления

Определение ViewModel:

public class DocumentViewModel 
{
    [Required(ErrorMessage = "First Name is required")]
    [RegularExpression(@"^[a-zA-Z- ']+$", ErrorMessage = "First Name should not contain any special character or number.")]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Last Name is required")]
    [RegularExpression(@"^[a-zA-Z- ']+$", ErrorMessage = "Last Name should not contain any special character or number.")]
    public string LastName { get; set; }

    [Required(ErrorMessage = "Child EI ID is required")]
    public int? ChildEIID { get; set; }

   [Required(ErrorMessage = "DOB is required")]
   [DataType(DataType.Date)]
    public DateTime? DOB { get; set; }

    [Required(ErrorMessage = "District is required")]
    public string District { get; set; }

    [Required(ErrorMessage = "Date Of Referral is required")]
    [DataType(DataType.Date)]
    public DateTime? DateOfReferral{ get; set; }

}

СПОСОБ ПРОВЕДЕНИЯ

 [HttpPost]
 [AutoValidateAntiforgeryToken]
    public ActionResult Documents(UploadDocumentViewModel viewModel)
    {


        //string errorMessages = "";
        if (!ModelState.IsValid)
        {
            return ModelErrors();
        }

        return Json(new { status = "success", message = "Documents Uploaded." });
    }

ОШИБКИ МОДЕЛИ СПОСОБ ВОЗВРАТА

private ActionResult ModelErrors()
    {
        var modelStateErrors = this.ModelState.Keys.SelectMany(key => this.ModelState[key].Errors);
        var message = "<ul>";

        foreach (var modelStateError in modelStateErrors)
        {
            message += "<li>" + modelStateError.ErrorMessage + "</li>";
        }
        message += "</ul>";
        return Json(new { status = "error", message = message });
    }

1 Ответ

0 голосов
/ 18 июня 2020

Если вы хотите, чтобы сообщения об ошибках были отсортированы, вы должны определить критерии сортировки. По-видимому, вы обнаружили ситуацию, в которой отсутствует детерминированный c порядок.

Если вы хотите отсортировать ошибки по имени свойства, это должно помочь:

var modelStateErrors = this.ModelState.Keys.OrderBy(x => x).SelectMany(key => this.ModelState[key].Errors);

Если вы хотите, чтобы ключи были отсортированы по другим критериям, вы можете создать атрибут для украшения свойств и использовать отражение для сортировки сообщений об ошибках в этом порядке.

Однако в 2020 году довольно редко иметь такой список сообщения об ошибках под формой ввода. Вместо этого вы должны отображать каждое указанное c сообщение об ошибке рядом (или ниже) недопустимого поля формы ввода. Кроме того, вы можете показать все ошибки ModelState без ключа (поскольку они не могут быть расположены рядом с полем ввода) в сводке ul / li. Это может произойти, если у вас есть ошибки проверки, которые не относятся непосредственно к определенному полю ввода c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...