在ViewModel中验证是否足够

本文关键字:是否 验证 ViewModel | 更新日期: 2023-09-27 18:09:55

因为我首先使用数据库,所以我通过ViewModel验证我的输入。但这是否足以验证,或者是否有一些不成文的规则来添加它,例如在控制器中?

还有,最常用的属性验证是什么,比如密码?

[Required]
[StringLength(50)]
[MinLength(3)]
public string Password { get; set; }

这是一个很好的验证吗?

在ViewModel中验证是否足够

属性验证非常适合它所能做的事情。除了您提到的验证属性之外,还有EmailAddress属性,它将给定的属性作为电子邮件地址进行验证。

[EmailAddress(ErrorMessage = "Invalid Email Address")]

然后你有正则表达式验证属性来做更复杂的自定义验证:

[RegularExpression(@"^[a-zA-Z''-''s]{1,40}$", 
         ErrorMessage = "Characters are not allowed.")]

对于条件验证之类的事情,您可以将该逻辑添加到控制器中,并根据需要将错误添加到ModelState中。

的例子:

if (MyProperty == "something" && MyOtherProperty != "something")
{
    ModelState.AddModelError("", "MyOtherProperty needs to be something")
}

如果你不想在你的控制器逻辑中使用这种样板验证代码,你可以编写你自己的自定义验证属性。通过这样做,您几乎可以验证您能想到的任何内容。

网上有很多关于这个话题的资源。

如何创建自定义验证属性?

如何创建自定义数据注释验证器

不要忘记调用ModelState. isvalid来检查ModelState的有效性。除此之外,我可以想象您还需要做一些额外的数据库验证检查。