【问题标题】:How to validate properties across Models without repeating the validation logic如何在不重复验证逻辑的情况下跨模型验证属性
【发布时间】:2010-06-06 15:30:50
【问题描述】:

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


public class user
{
    public int userId {get; private set};
    public string FirstName {get; set;}
}
要进行的验证是名字不能超过 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,那就太棒了。非常感谢任何建议。

谢谢!!

【问题讨论】:

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


    【解决方案1】:

    您可以查看FluentValidation。它是一个很棒的框架,可以让您将模型的验证逻辑与模型本身分离,提供unit test the validation logic 的简单方法,并且可以用于任何类型的应用程序,当然还有seamlessly integrates with ASP.NET MVC

    【讨论】:

    • 感谢达林,这正是我想要的。我会试试看。
    【解决方案2】:

    了解一些事情:您,程序员,是唯一知道对程序中的每个属性进行何种验证的人。因此,您是编写验证代码的人。

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

    【讨论】:

    • 我想我可能没有正确解释。然而,Darin Dimitrov 的建议是我一直在寻找的。谢谢。
    猜你喜欢
    • 2011-10-05
    • 1970-01-01
    • 2014-12-04
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多