【问题标题】:.net mvc 2 validation: summing up values of several attributes.net mvc 2 验证:总结几个属性的值
【发布时间】:2011-06-26 15:36:40
【问题描述】:

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

[绑定(排除=“A_ID”)] 公共类 A_Validation { [必需(ErrorMessage =“缺少某些东西”)] 公共字符串标题 { 获取;放; } // 更多属性 ... 公共 B b { 得到;放; } }

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

[绑定(排除=“B_ID”)] 公共类 B_Validation { [必需(错误消息 =“缺失”)] [范围(1, 210, ErrorMessage = "1 到 210 之间的范围")] 公共 int 首先 { 获取;放; } [必需(错误消息 =“缺失”)] [范围(1, 210, ErrorMessage = "1 到 210 之间的范围")] 公共 int 第二 { 获取;放; } [必需(错误消息 =“缺失”)] [范围(1, 210, ErrorMessage = "1 到 210 之间的范围")] 公共 int 第三 { 获取;放; } }

我能够检查 B 的三个属性 firstsecondthird 的范围我还想要检查所有三个属性的 sum firstsecondthird 低于某个阈值。

任何想法如何进行?

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

【问题讨论】:

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


    【解决方案1】:

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

    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; }
    

    【讨论】:

    • @Darin 我已经做到了,但是视图应该如何显示这个验证结果呢? firstsecondthird 都是我可以使用 &lt;%: Html.ValidationMessageFor(model =&gt; model.B.first)%&gt; 验证的属性 - 我应该如何进行总和?
    • @Jaques le Fraque,因为此属性适用于您不再使用 ValidationMessageFor 显示错误消息的许多属性。您可以使用 ValidationSummary 助手显示它。
    • @Darin Dimitrov,我通过[SumBelow(123, ErrorMessage = "sum below 123")] 提供的ErrorMessage 未显示在ValidationSummary 中。无论如何,我也尝试添加客户端验证,根本没有触发
    • @Jaques le Fraque,你试过这样@Html.ValidationSummary(false)吗?就客户端验证而言,您需要为 jquery validate 插件编写一个自定义适配器。
    • @Darin Dimitrov,是的,我做了确切的事情,但这个验证结果仍然缺失:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多