我的网站上有以下型号

    [Table("UserProfile")]
    public class UserProfile
    {
        [Key]
        public int UserId { get; set; }

        [DisplayName("E-Mail")]
        [MaxLength(60)]
        [RegularExpression(@"[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}", ErrorMessage = "Invalid e-mail")]
        public string MailAddress { get; set; }

        public UserInfo userInfo{ get; set; }
    }
public class UserInfo
    {
        [Key, ForeignKey("UserProfile")]
        public int UserProfileUserId { get; set; }

        public virtual UserProfile UserProfile { get; set; }


    [UIHint("PhoneNumbers")]
    public List<PhoneNumber> PhoneNumbers { get; set; }
[...]
    }
public class PhoneNumber
{
    public int Id { get; set; }

    [MaxLength(20)]
    [DisplayName("Téléphone")]
    [RegularExpression(@"^[+]?[0-9\s]{2,20}$", ErrorMessage = "Invalid")]
    public string Phone { get; set; }

    public int UserInfoId { get; set; }
    [ForeignKey("UserInfoId")]
    public Physician UserInfo { get; set; }
}


注册用户时,我具有以下视图:

<div class="editor-label">
    @Html.LabelFor(model => model.MailAddressTemp)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.MailAddressTemp)
    @Html.ValidationMessageFor(model => model.MailAddressTemp)
</div>


验证还可以



但是,当我尝试从另一个视图修改邮件地址时

<div class="editor-label">
    @Html.LabelFor(model => model.UserProfile.MailAddress)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.UserProfile.MailAddress)
    @Html.ValidationMessageFor(model => model.UserProfile.MailAddress)
</div>


不能使用完全相同的邮件地址


有人可以向我解释为什么正则表达式验证对子属性无效吗?

顺便说一句,我确实在注册和修改帐户期间对电话号码进行了验证。

谢谢

最佳答案

为了使答案更加详尽:


您不能对嵌套对象进行客户端验证。
您可以将DataAnnotations替换为某些第三方验证库,例如FluentValidatio。
通常,DataAnnotations用于简单方案。对于带有嵌套对象的更复杂的情况,可以实现IValidatableObject接口。

关于c# - 数据注释的正则表达式在子属性上的行为有所不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21312913/

10-11 15:58