C# ASP.NET核心模型验证错误以错误的顺序显示
问题: 模型错误不会根据模型定义显示,而是随机显示 这在ASP.NET核心应用程序中发生。我在常规asp.net mvc应用程序中从未遇到过此问题 在asp.net core razor页面中是否需要启用任何设置?还是我做错了什么。请帮忙 用户界面显示 错误以随机格式显示:C# ASP.NET核心模型验证错误以错误的顺序显示,c#,asp.net-core,C#,Asp.net Core,问题: 模型错误不会根据模型定义显示,而是随机显示 这在ASP.NET核心应用程序中发生。我在常规asp.net mvc应用程序中从未遇到过此问题 在asp.net core razor页面中是否需要启用任何设置?还是我做错了什么。请帮忙 用户界面显示 错误以随机格式显示: 需要DOB需要姓氏需要儿童EI ID需要名字需要学区需要转诊日期 视图模型定义: public class DocumentViewModel { [Required(ErrorMessage = "First N
- 需要DOB
- 需要姓氏 需要儿童EI ID
- 需要名字
- 需要学区
- 需要转诊日期
-
视图模型定义:
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 });
}
模型错误返回方法
[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 });
}
private ActionResult ModelErrors()
{
var modelstatererrors=this.ModelState.Keys.SelectMany(key=>this.ModelState[key].Errors);
var message=“”;
foreach(modelStateErrors中的var modelStateError)
{
message+=“- ”+modelstatererror.ErrorMessage+”
”;
}
消息+=“
”;
返回Json(新的{status=“error”,message=message});
}
如果希望对错误消息进行排序,则应定义排序条件。显然,你已经发现了一种不存在确定性顺序的情况
如果要按属性名称对错误进行排序,则应遵循以下技巧:
var modelStateErrors = this.ModelState.Keys.OrderBy(x => x).SelectMany(key => this.ModelState[key].Errors);
如果希望按其他条件对键进行排序,可以创建一个属性来装饰属性,并使用反射按该顺序对错误消息进行排序
然而,在2020年,在输入表单下面出现这种错误消息列表是非常罕见的。相反,您应该在无效输入表单字段的旁边(或下面)显示每个特定的错误消息。此外,您可以在ul/li摘要中显示所有没有键的ModelState错误(因为它们不能位于输入字段旁边)。如果存在不直接属于特定输入字段的验证错误,则可能会出现这种情况。如果希望对错误消息进行排序,则应定义排序条件。显然,你已经发现了一种不存在确定性顺序的情况 如果要按属性名称对错误进行排序,则应遵循以下技巧:
var modelStateErrors = this.ModelState.Keys.OrderBy(x => x).SelectMany(key => this.ModelState[key].Errors);
如果希望按其他条件对键进行排序,可以创建一个属性来装饰属性,并使用反射按该顺序对错误消息进行排序
然而,在2020年,在输入表单下面出现这种错误消息列表是非常罕见的。相反,您应该在无效输入表单字段的旁边(或下面)显示每个特定的错误消息。此外,您可以在ul/li摘要中显示所有没有键的ModelState错误(因为它们不能位于输入字段旁边)。如果存在不直接属于特定输入字段的验证错误,则可能会出现这种情况