MVC.Net中的嵌套字段表单验证不引人注目的验证

MVC.Net中的嵌套字段表单验证不引人注目的验证,.net,asp.net-mvc-3,unobtrusive-validation,.net,Asp.net Mvc 3,Unobtrusive Validation,此代码正确验证: @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

此代码正确验证:

@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>
这里是FirstLastName属性,它适用于第一段代码,但不适用于第二段代码

public class FirstLastNameAttribute : RegularExpressionAttribute
{
    public FirstLastNameAttribute() :
        base(@"^[A-Za-z0-9\.\-_\!\#\^\~ ]{1,31}(?<!\.)$")
    {
        ErrorMessageResourceName = "FirstLastNameErrorMessage";
        ErrorMessageResourceType = typeof(Messages);
    }
}
公共类FirstLastNameAttribute:RegularExpressionAttribute
{
public FirstLastNameAttribute():

碱基(@“^[A-Za-z0-9\.-\!\\\\\^\]{1,31}(?所以我找到了它不起作用的原因

出于某种原因(我不明白为什么,如果有人能解释,请解释一下,我会更改已接受的答案),在必需的属性破坏了括号后使用括号“()”。一旦我删除了括号,一切都正常了

[DisplayName("First Name")]
[Required]
[FirstLastName]
public string FirstName{ get; set; }

由于我使用的正则表达式,它也不起作用。它不喜欢反向查找
(?)部分。因此,删除该部分后,它就起作用了。

所显示的内容没有问题-
[Required]
属性可以正常工作。但您没有指出
[FirstLastName]是什么
是或是。@StephenMuecke我已经为FirstLastNameAttribute添加了代码。它对第一位代码有效,但对第二位代码无效。Required属性对两组代码都有效。对我来说效果非常好。显示两种情况下的html输出。@StephenMuecke我已经将输出添加到问题的底部。否她将为
[FirstLastName]
工作,因为两者都没有生成必要的
数据val regex=“…”
数据val regex pattern=“…”
属性。我假设您没有在
全局.asax中注册该属性
<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">
<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}(?&lt;!\.)$" 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(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHklEQVQ4EaVTO26DQBD1ohQWaS2lg9JybZ+AK7hNwx2oIoVf4UPQ0Lj1FdKktevIpel8AKNUkDcWMxpgSaIEaTVv3sx7uztiTdu2s/98DywOw3Dued4Who/M2aIx5lZV1aEsy0+qiwHELyi+Ytl0PQ69SxAxkWIA4RMRTdNsKE59juMcuZd6xIAFeZ6fGCdJ8kY4y7KAuTRNGd7jyEBXsdOPE3a0QGPsniOnnYMO67LgSQN9T41F2QGrQRRFCwyzoIF2qyBuKKbcOgPXdVeY9rMWgNsjf9ccYesJhk3f5dYT1HX9gR0LLQR30TnjkUEcx2uIuS4RnI+aj6sJR0AM8AaumPaM/rRehyWhXqbFAA9kh3/8/NvHxAYGAsZ/il8IalkCLBfNVAAAAABJRU5ErkJggg==&quot;); background-repeat: no-repeat; background-attachment: scroll; background-position: right center; cursor: auto;" aria-required="true">
[DisplayName("First Name")]
[Required]
[FirstLastName]
public string FirstName{ get; set; }