如何在ASP.NET中使用ModelState.IsValid?

时间:2017-01-18 04:44:14

标签: c# asp.net .net

我们说我有一个Employee类,其名称字段必须是字符串,但在提交名称的格式为123,例如,我看到这样的代码:

UpdateModel(employee);
if (ModelState.IsValid)
{
   employeeBusinessLayer.SaveEmployee(employee);

   return RedirectToAction("Index");
}

我不太清楚如何在这里使用ModelState.IsValid,我的意思是它在调用时:

UpdateModel(employee);

它会引发异常,因为员工的姓名不能成为一个数字,如果它不会抛出异常,则意味着该模型有效,那么为什么我们仍然使用{{1} }?为什么不使用try catch block?

5 个答案:

答案 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。如果您的视图正在处理错误,例如具有验证摘要,那么它将显示您添加的错误。