我的网站上有以下型号
[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/