MVC DataAnnotation接受无空间

时间:2014-10-30 16:46:51

标签: asp.net-mvc asp.net-mvc-3 model-view-controller data-annotations

我在MVC5中开发了一个登录视图。

我想在ViewModel级别设置一个DataAnnotation来声明该字段不接受空格。

MVC中是否有数据注释(类似于[NoSpaces],可用于不允许字符串字段包含"空格"?

3 个答案:

答案 0 :(得分:25)

这个怎么样:

[RegularExpression(@"^\S*$", ErrorMessage = "No white space allowed")]

答案 1 :(得分:0)

如果这对任何人都方便,我可以通过在客户端执行此操作来解决此问题:

//修剪每个表单输入

var $form = $("#myForm");
$form.find("input:text").each(function(){
   var $self= $(this);
   $self.va($self.val().trim());
});

//然后先验证再提交

if($form.valid()){ $form.submit(); }
服务器ModelState.Isvalid上的

//确实使用[Required]验证了每个项目,并且不会仅接受输入中的空格(但这意味着要往返服务器,并且并不总是很方便)

答案 2 :(得分:0)

嗯,我能想到的最简单但强大的方法是查看现有代码的工作原理,或者现有数据注释的工作原理。

例如,让我们看看 System.ComponentModel.DataAnnotations.StringLengthAttribute 类。

这里只是定义(只是为了简短):

namespace System.ComponentModel.DataAnnotations
{
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
    public class StringLengthAttribute : ValidationAttribute
    {
        public StringLengthAttribute(int maximumLength);

        public int MinimumLength { get; set; }

        public override string FormatErrorMessage(string name);
       
        public override bool IsValid(object value);
    }
}

因此,我只需从 GitHub 复制原始实现源代码并根据我的需要对其进行自定义。例如,要获得这样的签名(如果我理解正确并且这就是您想要的):

public StringLengthAttribute(int maximumLength, int minLength = 0, allowEmptySpaces = true);

有关更深入的信息,我还会阅读有关 ValidationAttribute 类的 Microsoft 文档,该类是自定义验证数据注释的基类。

编辑:

如果我只需要排除空字符串或仅包含空格的字符串,我会依赖正则表达式来验证数据,因为正则表达式非常昂贵< /strong> 处理(并且需要大量内存分配,因为表达式编译器、状态机等)。