MVC - 在ViewModel中验证足够吗?

时间:2016-09-30 18:13:48

标签: c# asp.net-mvc validation

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

此外,属性验证最常见的是什么,让我们说密码?

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

这是一个很好的验证吗?

2 个答案:

答案 0 :(得分:2)

属性验证非常适合它的功能。除了您提到的验证属性之外,您还拥有EmailAddress属性,该属性将给定属性验证为电子邮件地址。

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

然后,您可以使用RegularExpression验证属性来执行更复杂的自定义验证:

[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")
}

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

互联网上有关于该主题的大量资源。

here

How to create a custom validation attribute?

仅举几例。

答案 1 :(得分:0)

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