我正在尝试检查表单上是否存在多个错误。这是我的代码:
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
上显示多行,或者有更好的方法来处理此问题?
感谢您的帮助!
答案 0 :(得分:1)
对于控制器中出现的每个错误,应调用ModelState.AddModelError
,恕我直言,将验证逻辑与用户界面中的呈现方式相混合并不是一个好习惯。实际上,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 Core:
<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?