我们说我有一个Employee
类,其名称字段必须是字符串,但在提交名称的格式为123,例如,我看到这样的代码:
UpdateModel(employee);
if (ModelState.IsValid)
{
employeeBusinessLayer.SaveEmployee(employee);
return RedirectToAction("Index");
}
我不太清楚如何在这里使用ModelState.IsValid
,我的意思是它在调用时:
UpdateModel(employee);
它会引发异常,因为员工的姓名不能成为一个数字,如果它不会抛出异常,则意味着该模型有效,那么为什么我们仍然使用{{1} }?为什么不使用try catch block?
答案 0 :(得分:0)
提供错误消息,显示名称和特定字符串格式。
[DisplayName("First Name")]
[Required(ErrorMessage="{0} is required.")]
[StringLength(50, MinimumLength = 10, ErrorMessage="{0}'s length should be between {2} and {1}.")]
public string Name { get; set; }
https://www.exceptionnotfound.net/asp-net-mvc-demystified-modelstate/
答案 1 :(得分:0)
您必须在Name属性上修饰RegularExpression以仅允许字符。
[RegularExpression("([a-zA-Z]+)", ErrorMessage = "Enter only alphabets for Name")]
public string Name { get; set; }
答案 2 :(得分:0)
ModelState.IsValid告诉您是否已将任何模型错误添加到ModelState。
这也取决于各种情况。 如果我想绑定6个模型中的四个属性,那么我将从模型状态中删除错误并更新模型。 否则如果我想验证所有属性,那么我将首先使用ModelState.IsValid,并根据该结果我们将进行下一步操作。
答案 3 :(得分:0)
通常你会使用:
if (!ModelState.IsValid) {
//Handle the error here, if needed
ModelState.AddModelError("", "Your Validation Message");
}
正如其他人所说,如果你想让.net为你处理验证,你会在你的模型(或视图模型)中修饰属性。
答案 4 :(得分:0)
ModelState.IsValid只检查您使用的模型是否已通过您添加到属性的数据注释。例如,您可以将[Required]注释添加到我们的某个模型属性中。然后,ModelState.IsValid将对此进行验证。如果您没有向模型添加任何数据注释,那么,是的,ModelState.IsValid不会有太大帮助。
但是,您也可以使用控制器操作中的ModelState.AddError方法将自己的错误添加到ModelState。这很有用,因为.Net将为您处理所有错误和内容,前提是您使用内置验证方法。因此,您可以使用ModelState.AddError,然后返回View。如果您的视图正在处理错误,例如具有验证摘要,那么它将显示您添加的错误。