首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理多行AddModelError错误?

如何处理多行AddModelError错误?
EN

Stack Overflow用户
提问于 2018-10-18 06:01:14
回答 1查看 858关注 0票数 1

我正在尝试检查我的表单上是否有多个错误。下面是我的代码:

代码语言:javascript
复制
  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上显示多行的方法,或者有没有更好的方法来处理这个问题?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-18 06:07:58

你应该为你的控制器中的每个错误调用ModelState.AddModelError,IMHO,将你的验证逻辑与在用户界面中呈现的方式混合起来不是一个好的做法。事实上,MVC模式就是分离三个关注点:模型(数据)、控制器(逻辑,比如验证)和视图(用户界面)。

所以我会这样做:

代码语言:javascript
复制
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核心:

代码语言:javascript
复制
<div asp-validation-summary="ValidationSummary.ModelOnly"></div>

如果您使用的是以前版本的ASP.NET MVC:

代码语言:javascript
复制
@Html.ValidationSummary()

这将生成您可以使用CSS设置样式的HTML。

如果您使用的是asp.net核心,请参阅here获取更多信息;如果您使用的是以前版本的ASP.NET MVC,请参阅here获取示例。

如果您想以不同的方式显示错误,您可以直接在视图中访问错误,甚至更好,滚动您自己的帮助器,请参阅此问题的答案:How do I get the collection of Model State Errors in ASP.NET MVC?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52864240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档