【问题标题】:Best way to prevent repetition of Validation annotations in VIewModel?防止在 VIewModel 中重复验证注释的最佳方法?
【发布时间】:2017-03-20 21:26:36
【问题描述】:

我有一个带有大约 30 个输入属性的 Viewmodel,带有十进制正则表达式验证,即:

[RegularExpression(@"\d+(\.\d{1,2})?", ErrorMessage = "Invalid decimal")]
public string strProperty { get; set; }

但是,我不想对每个属性都重复此操作。有没有办法对此更加集中和干燥。

一个想法是定义“\d+(.\d{1,2})?”作为一个常数。

谢谢....

【问题讨论】:

  • 按照您对 \d+(.\d{1,2})? 常量的想法,您可以使用在验证器中备份的正则表达式来实现自定义 ValidationAttribute。
  • 如果您的所有属性都应用了相同的验证,那么您的模型似乎很奇怪。你可以创建一个子类型的集合吗?
  • 将属性声明为floatdecimal,它将自动发生。

标签: c# asp.net-mvc asp.net-mvc-5


【解决方案1】:

想到的一种方法是从RegularExpressionAttribute继承:

public class DecimalAttribute : RegularExpressionAttribute {
    public DecimalAttribute() : base(@"\d+(\.\d{1,2})?") {
        this.ErrorMessage = "Invalid decimal";
    }
}

然后就变成了:

[Decimal]
public string strProperty { get; set; }

假设您知道自己在做什么,并且不能只创建属性decimal 而不是字符串。

【讨论】:

  • 谢谢。我同意仅使用“十进制”类型是理想的方式,但是我在指定自定义错误消息方面遇到了困难,因此我的 SO 问题:stackoverflow.com/questions/42904883/…
  • 我很久没有使用asp.net了,但是如果你们都应用这个属性并且把字段设为小数呢?
猜你喜欢
  • 2015-08-08
  • 2013-10-05
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 2015-09-30
  • 2010-09-11
相关资源
最近更新 更多