Как мне обработать многострочные ошибки AddModelError? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь проверить несколько ошибок в моей форме.Вот код, который у меня есть:

  var hasErrors = false;
  var sb = new StringBuilder();

  if (string.IsNullOrEmpty(creditCard.CardNumber))
  {
    hasErrors = true;
    sb.AppendLine("Credit card number is required.");
    //ModelState.AddModelError("PaymentAmount", "Credit card number is required.");
  }

  if (string.IsNullOrEmpty(creditCard.ExpirationDateMonth) || string.IsNullOrEmpty(creditCard.ExpirationDateYear))
  {
    hasErrors = true;
    // ModelState.AddModelError("PaymentAmount", "Expiration date is required.");
    sb.AppendLine("Expiration date is required.");
  }

  if (string.IsNullOrEmpty(creditCard.NameOnCard))
  {
    hasErrors = true;
    // ModelState.AddModelError("PaymentAmount", "Name is required.");
    sb.AppendLine("Name is required.");
  }

  decimal amt = 0;
  creditCard.PaymentAmount = creditCard.PaymentAmount.Replace("$", string.Empty);
  if (!decimal.TryParse(creditCard.PaymentAmount, out amt))
  {
    hasErrors = true;
    //ModelState.AddModelError("PaymentAmount","Amount is invalid.");
    sb.AppendLine("Amount is invalid.");
  }

  if (hasErrors)
  {
    ModelState.AddModelError("PaymentAmount", sb.ToString().Replace(Environment.NewLine,"<br>"));
    return View("CreditCard", creditCard);
  }

Я пытаюсь получить AddModelError для отображения в несколько строк, но мне не повезло.Он отображает <br> в виде текста на экране, а не прерывает перерыв.

У меня было, когда ошибка передавалась индивидуально, но вам нужно было отправить форму несколько раз, прежде чем вы получите ошибки наэкран.Вот почему AddModelError закомментировано в каждой строке.

Есть ли способ отобразить несколько строк на AddModelError или есть лучший способ справиться с этим?

Спасибо запомощь!

1 Ответ

0 голосов
/ 18 октября 2018

Вы должны вызывать ModelState.AddModelError для каждой ошибки, которая есть в вашем контроллере, ИМХО, не рекомендуется смешивать логику проверки с тем, как все отображается в пользовательском интерфейсе.Фактически, шаблон MVC - это разделение трех задач: модели (данных), контроллера (логика, например, проверка) и представлений (пользовательский интерфейс).

Так что я бы сделал что-то вродеthis:

if (string.IsNullOrEmpty(creditCard.CardNumber))
{
      ModelState.AddModelError("PaymentAmount", "Credit card number is required.");
}

if (string.IsNullOrEmpty(creditCard.ExpirationDateMonth) || string.IsNullOrEmpty(creditCard.ExpirationDateYear))
{        
    ModelState.AddModelError("PaymentAmount", "Expiration date is required.");
}

if (string.IsNullOrEmpty(creditCard.NameOnCard))
{
    ModelState.AddModelError("PaymentAmount", "Name is required.");
}

[…]

Тогда, по вашему мнению, вы можете использовать следующий помощник HTML для рендеринга каждой ошибки в списке:

Если вы используете ASP.NET Core:

<div asp-validation-summary="ValidationSummary.ModelOnly"></div>

Если вы используете предыдущие версии ASP.NET MVC:

@Html.ValidationSummary()

Это создаст HTML, который можно стилизовать с помощью CSS.

См. здесь для получения дополнительной информации, если вы используете ядро ​​asp.net или здесь для примера, если вы используете предыдущую версию ASP.NET MVC.

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

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