如何在不重复验证逻辑的情况下验证模型中的属性

时间:2010-06-06 15:30:51

标签: c# asp.net-mvc validation model

我正在构建一个ASP.NET Mvc应用程序。我有一个数据模型说用户


public class user
{
    public int userId {get; private set};
    public string FirstName {get; set;}
}
要进行的验证是firstname不能超过50个字符。

我有另一个演示模型,其中我也有属性FirstName。我不想在两个模型中重复验证逻辑。我想把它放在一个地方,应该是它。

我可以通过添加一个可以在设置属性时调用的函数以更简单的方式来实现


private string firstName;
public string FirstName
{
    get
    {
        return firstName;
    }
    set
    {
        if (PropertyValidator.ValidName(value)) // assuming ValidName exists and it will throw an exception if the value is not valid
        {
             firstName = value;
        }
    }
}
但我正在寻找一些更简单的东西,这样我就不需要为每个需要验证的属性添加这个。我查看了ValidationAttribute但是我再次只能从控制器(ModelState.IsValid)验证这一点。由于这个模型可以被其他类型的应用程序(如控制台应用程序)使用,我无法选择。但是如果有一种方法可以从控制器外部使用Mvc的ModelState.IsValid,那就太棒了。非常感谢任何建议。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以查看FluentValidation。这是一个很棒的框架,允许您将模型的验证逻辑与模型本身分开,提供了unit test the validation logic的简便方法,可以在任何类型的应用程序中使用,当然也可以seamlessly integrates with ASP.NET MVC

答案 1 :(得分:0)

理解:您,程序员,是唯一知道程序中每个属性的验证适合的人。因此,您就是编写验证代码的人。

你能定义一个Length_Validated_String类,它验证字符串的长度,然后让你的各种其他演示模型使用该类,并对其进行验证,而不是每次都重新发明轮子?