【发布时间】:2016-01-04 01:02:03
【问题描述】:
此代码正确验证:
@Html.LabelFor(m => m.FirstName, new { @class = "control-label col-md-2 required" })
<div class="col-md-4">
@Html.EditorFor(m => m.FirstName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.FirstName)
</div>
此代码未正确验证:
@Html.LabelFor(model => model.User.FirstName, new { @class = "control-label col-md-3 required" })
<div class="col-md-8">
@Html.EditorFor(model => model.User.FirstName, new { @class = "form-control required" })
@Html.ValidationMessageFor(m => m.User.FirstName)
</div>
第二块代码中的model.User与第一块代码中的“m”是同一类型的对象。
这是模型中显示自定义验证器属性的块。
[DisplayName("First Name")]
[Required()]
[FirstLastName]
public string FirstName{ get; set; }
这是 FirstLastName 属性,它适用于第一段代码,但不适用于第二段。
public class FirstLastNameAttribute : RegularExpressionAttribute
{
public FirstLastNameAttribute() :
base(@"^[A-Za-z0-9\.\-_\!\#\^\~ ]{1,31}(?<!\.)$")
{
ErrorMessageResourceName = "FirstLastNameErrorMessage";
ErrorMessageResourceType = typeof(Messages);
}
}
正常工作的第一段代码的 HTML 输出
<input class="input-validation-error text-box single-line form-control" data-val="true" data-val-regex="Allowed characters: a-Z, 0-9, .-_!#^~, and space. Cannot end with a period. Must be 1-32 characters." data-val-regex-pattern="^[A-Za-z0-9\.\-_\!\#\^\~ ]{1,31}(?<!\.)$" data-val-required="The First Name field is required." id="FirstName" name="FirstName" type="text" value="asdf." aria-required="true">
无法正常工作的第二段代码的 HTML 输出
<input type="text" value="" name="User.FirstName" id="User_FirstName" data-val-required="The First Name field is required." data-val-regex-pattern="^[A-Za-z0-9\.\-_\!\#\^\~ ]{1,31}(?<!\.)$" data-val-regex="Allowed characters: a-Z, 0-9, .-_!#^~, and space. Cannot end with a period. Must be 1-32 characters." data-val="true" class="text-box single-line form-control" style="background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHklEQVQ4EaVTO26DQBD1ohQWaS2lg9JybZ+AK7hNwx2oIoVf4UPQ0Lj1FdKktevIpel8AKNUkDcWMxpgSaIEaTVv3sx7uztiTdu2s/98DywOw3Dued4Who/M2aIx5lZV1aEsy0+qiwHELyi+Ytl0PQ69SxAxkWIA4RMRTdNsKE59juMcuZd6xIAFeZ6fGCdJ8kY4y7KAuTRNGd7jyEBXsdOPE3a0QGPsniOnnYMO67LgSQN9T41F2QGrQRRFCwyzoIF2qyBuKKbcOgPXdVeY9rMWgNsjf9ccYesJhk3f5dYT1HX9gR0LLQR30TnjkUEcx2uIuS4RnI+aj6sJR0AM8AaumPaM/rRehyWhXqbFAA9kh3/8/NvHxAYGAsZ/il8IalkCLBfNVAAAAABJRU5ErkJggg=="); background-repeat: no-repeat; background-attachment: scroll; background-position: right center; cursor: auto;" aria-required="true">
嵌套对象验证有问题吗?有没有简单的解决方法?
【问题讨论】:
-
您显示的内容没有任何问题 -
[Required]属性可以正常工作。但是你还没有说明[FirstLastName]是什么或做什么。 -
@StephenMuecke 我已经添加了 FirstLastNameAttribute 的代码。它适用于第一位代码,但不适用于第二位。所需属性适用于两组代码。
-
对我来说非常好用。显示两种情况的 html 输出。
-
@StephenMuecke 我已将输出添加到问题的底部。
-
两者都不适用于
[FirstLastName],因为两者都不会生成必要的data-val-regex=".."和data-val-regex-pattern=".."属性。我假设是因为您尚未在Global.asax中注册该属性
标签: .net asp.net-mvc-3 unobtrusive-validation