【发布时间】:2012-03-05 09:29:46
【问题描述】:
我正在尝试对集合中项目的属性使用 DataAnnotations RegularExpression 属性 - Field 对象具有 Formatter 对象的集合,而后者又具有具有 Value 属性的 Attributes 集合。
在我的属性视图模型类中,我有:
[RegularExpression(@"^\d+$", ErrorMessage = "That didn't do what you hoped it would do")]
public string Value { get; set; }
我认为这是:
@Html.TextBoxFor( x => x.Formatters[fmt].Attributes[att].Value )
它会产生这个标记:
<input type="text" value=" " name="Formatters[1].Attributes[0].Value" data-val-regex-pattern="^\d+$" data-val-regex="That didn't do what you hoped it would do" data-val="true" >
所有这些看起来都是正确的,但验证总是第一次失败。如果我在文本框中输入 23 并退出,它会触发验证事件并告诉我事情并没有像我希望的那样进行。如果我回到该字段并输入完全相同的值,它就会起作用。如果我输入字母,它仍然会失败。
任何人都知道我可能做错了什么,或者我可以做些什么来强制验证在第一次表现出来?它似乎与集合有关,因为如果我将相同的验证属性放在顶级属性上,它应该可以正常工作。
谢谢!
【问题讨论】:
-
跟踪到不显眼的验证 js 文件中的行 - “match = new RegExp(params).exec(value);” RegExp.exec 第一次返回 null,之后每次返回一个值。
-
这很奇怪。我无法重现该问题。您能否提供一个缩小的视图模型、控制器和视图允许复制的示例?
标签: regex asp.net-mvc-3 unobtrusive-validation