我正在尝试检查我的表单上是否有多个错误。下面是我的代码:
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上显示多行的方法,或者有没有更好的方法来处理这个问题?
谢谢你的帮助!
发布于 2018-10-18 06:07:58
你应该为你的控制器中的每个错误调用ModelState.AddModelError,IMHO,将你的验证逻辑与在用户界面中呈现的方式混合起来不是一个好的做法。事实上,MVC模式就是分离三个关注点:模型(数据)、控制器(逻辑,比如验证)和视图(用户界面)。
所以我会这样做:
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核心:
<div asp-validation-summary="ValidationSummary.ModelOnly"></div>如果您使用的是以前版本的ASP.NET MVC:
@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?
https://stackoverflow.com/questions/52864240
复制相似问题