【问题标题】:Create custom DataType Validation创建自定义数据类型验证
【发布时间】:2014-06-13 18:18:10
【问题描述】:

我想创建自己的验证类(我在 JS 中有很多验证方法,我想将其转换为 C# 以与 MVC 模型一起使用),其工作方式与数据注释完全相同,在客户端和服务器端进行验证:@ 987654321@ 或类似这样的验证 DataAnnotation 属性:[MyDataTypeValidation]

我不知道哪个选项更好地使我的验证成为“库”

例如,我有我的 FigurasDA 类,我想对属性名进行自定义验证。

namespace MonitoreoIntegrado.Models
{
    [MetadataType(typeof(FigurasDA))]
    public partial class Figuras
{
}

public class FigurasDA
{
    [DataType(MyDataType)]
    //or
    [MyDataTypeValidation]
    public string nombre { get; set; }
}
}

所以在这种情况下,我想验证字符串是否与正则表达式 @"^[\w\s\.\-_]+$" 匹配,如果不匹配,则显示类似“Solo se permite letras, numeros y puntuaciones(- _ .)”的错误消息。 (这是我的“Alfanumerico”数据类型)。

你能举个例子,把我的验证类放在哪里,里面写了什么代码?

【问题讨论】:

  • 你试过RegularExpressionAttribute ex:[RegularExpression(@"pattern", ErrorMessage="")]吗?或者,您可以扩展 ValidationAttribute 类之一。
  • 我想在很多课程中使用这个正则表达式。所以我想我需要一门课

标签: c# asp.net-mvc validation


【解决方案1】:

其实很简单...您只需从ValidationAttribute 类继承自定义验证属性并提供您自己的IsValid 逻辑。例如:

public class MyDataTypeValidationAttribute : ValidationAttribute
{
    private Regex _regex = new Regex(@"^[\w\s.-_]+$");          

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {               
        if (_regex.IsMatch(value.ToString()))
        {
            return ValidationResult.Success;
        }

        return new ValidationResult("Solo se permite letras, numeros y puntuaciones(- _ .)" );
    }
}

您可以在视图模型中使用:

public class FigurasDA
{    
    [MyDataTypeValidation]
    public string nombre { get; set; }
}

您可以保存此验证属性,例如在您的 MVC 项目中的 Attributes 文件夹中:

【讨论】:

  • @Clamari,在您的解决方案/项目中的任何位置。您可以创建名为 Attributes 的文件夹并将所有自定义验证逻辑放在那里。
  • 在我的项目根 IE 内的 DataValidation.css 文件中?
  • @Clamari,css是级联样式表文件,它包含html页面样式。例如,我提供了一些屏幕截图,请参阅我的编辑。
  • 抱歉,打错了。 DataValidation.cs 它只是一个额外的“s”哈哈非常感谢:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多