.net mvc 2验证:总结几个属性的值

时间:2011-06-26 15:36:41

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

我在我的项目中使用.NET 4 MVC 2。我基本上有两个类,我用它来验证。 A类是我的(主)模型,B类是A类可能具有的复合属性。代码如下所示:

[Bind(Exclude = "A_ID")]
    public class A_Validation
    {
        [Required(ErrorMessage = "something is missing")]
        public string title { get; set; }

        // some more attributes ...

        public B b { get; set; }
    }

基于A类的所有验证都运行良好。但现在我想验证复合属性B,如下所示。

[Bind(Exclude = "B_ID")]
    public class B_Validation
    {
        [Required(ErrorMessage = "missing")]
        [Range(1, 210, ErrorMessage = "range between 1 and 210")]
        public int first { get; set; }

        [Required(ErrorMessage = "missing")]
        [Range(1, 210, ErrorMessage = "range between 1 and 210")]
        public int second { get; set; }

        [Required(ErrorMessage = "missing")]
        [Range(1, 210, ErrorMessage = "range between 1 and 210")]
        public int third { get; set; }
    }

我能够检查B的三个属性第一个第二个第三个的范围我还想要检查所有三个属性的总和 首先第二第三 低于某个阈值。

任何想法如何进行?

我认为ViewModels可能有所帮助,但我没有使用它们的经验。

1 个答案:

答案 0 :(得分:0)

您是否尝试过编写自定义验证属性:

public class SumBelowAttribute : ValidationAttribute
{
    private readonly int _max;
    public SumBelowAttribute(int max)
    {
        _max = max;
    }

    public override bool IsValid(object value)
    {
        var b = value as B_Validation;
        if (b != null)
        {
            return b.first + b.second + b.third < _max;
        }
        return base.IsValid(value);
    }
}

然后使用以下属性装饰B属性:

[SumBelow(123)]
public B b { get; set; }