我在MVC5中开发了一个登录视图。
我想在ViewModel级别设置一个DataAnnotation来声明该字段不接受空格。
MVC中是否有数据注释(类似于[NoSpaces],可用于不允许字符串字段包含"空格"?
答案 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> 处理(并且需要大量内存分配,因为表达式编译器、状态机等)。