Pra*_*sad 45 regex asp.net-mvc data-annotations razor
当使用正则表达式中的特殊字符时,DataAnnotations验证器无法在asp.net mvc 4 razor视图中工作.
模型:
[StringLength(100)]
[Display(Description = "First Name")]
[RegularExpression("^([a-zA-Z0-9 .&'-]+)$", ErrorMessage = "Invalid First Name")]
public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)
剃刀查看:
@Html.TextBoxFor(model => Model.FirstName, new { })
@Html.ValidationMessageFor(model => Model.FirstName)
Run Code Online (Sandbox Code Playgroud)
不显眼的验证在视图中呈现为:
<input type="text" value="" tabindex="1" style="height:auto;" name="FirstName" maxlength="100" id="FirstName" data-val-regex-pattern="^([a-zA-Z0-9 .&amp;&#39;-]+)$" data-val-regex="Invalid First Name" data-val-length-max="100" data-val-length="The field FirstName must be a string with a maximum length of 100." data-val="true" class="textfield ui-input-text ui-body-d ui-corner-all ui-shadow-inset valid">
Run Code Online (Sandbox Code Playgroud)
上面html中的正则表达式模式没有按照模型的RegularExpression中的指定进行渲染,即使输入有效数据(Sam's)也会导致错误.
我怎么处理这个?
--UPDATE--
我根据@Rick建议更新了代码
[StringLength(100)]
[Display(Description = "First Name")]
[RegularExpression("([a-zA-Z0-9 .&'-]+)", ErrorMessage = "Enter only alphabets and numbers of First Name")]
public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)
查看源显示以下内容:
<input data-val="true" data-val-length="The field FirstName must be a string with a maximum length of 100." data-val-length-max="100" data-val-regex="Enter only alphabets and numbers of First Name" data-val-regex-pattern="([a-zA-Z0-9 .&amp;&#39;-]+)" id="FirstName" maxlength="100" name="FirstName" type="text" value="" />
Run Code Online (Sandbox Code Playgroud)
我还有同样的问题.
Ric*_*SFT 34
更新2012年7月9日 - 看起来这已在RTM中修复.
^,$所以你不需要添加它们.(包含它们似乎不是问题,但你不需要它们)查看源显示以下内容:
data-val-regex-pattern="([a-zA-Z0-9 .&'-]+)" <-- MVC 3
data-val-regex-pattern="([a-zA-Z0-9 .&amp;&#39;-]+)" <-- MVC 4/Beta
Run Code Online (Sandbox Code Playgroud)
看起来我们是双重编码.
Dar*_*rov 11
尝试转义这些字符:
[RegularExpression(@"^([a-zA-Z0-9 \.\&\'\-]+)$", ErrorMessage = "Invalid First Name")]
Run Code Online (Sandbox Code Playgroud)
在表达式开头尝试@符号.所以你不需要输入转义字符只需复制粘贴""中的正则表达式并放入@符号.像这样:
[RegularExpression(@"([a-zA-Z\d]+[\w\d]*|)[a-zA-Z]+[\w\d.]*", ErrorMessage = "Invalid username")]
public string Username { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
195347 次 |
| 最近记录: |