C# 数据注释上的正则表达式在子特性上的行为不同
我的网站上有以下型号C# 数据注释上的正则表达式在子特性上的行为不同,c#,asp.net,asp.net-mvc,asp.net-mvc-4,data-annotations,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Data Annotations,我的网站上有以下型号 [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-]+\\.)+
[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; }
}
[表(“用户配置文件”)]
公共类用户配置文件
{
[关键]
public int UserId{get;set;}
[显示名称(“电子邮件”)]
[MaxLength(60)]
[RegularExpression(@“[a-zA-Z0-9\\.-]+@([a-zA-Z0-9-]+\\)+[a-zA-Z]{2,6}”,ErrorMessage=“无效电子邮件”)]
公共字符串邮件地址{get;set;}
公共用户信息用户信息{get;set;}
}
公共类用户信息
{
[Key,ForeignKey(“UserProfile”)]
public int UserProfileUserId{get;set;}
公共虚拟用户配置文件用户配置文件{get;set;}
[UIHint(“电话号码”)]
公共列表电话号码{get;set;}
[...]
}
公共类电话号码
{
公共int Id{get;set;}
[MaxLength(20)]
[显示名称(“Téléphone”)]
[正则表达式(@“^[+]?[0-9\s]{2,20}$”,ErrorMessage=“Invalid”)]
公用字符串电话{get;set;}
public int UserInfoId{get;set;}
[外键(“用户信息ID”)]
公共医师用户信息{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>
@LabelFor(model=>model.MailAddressTemp)
@EditorFor(model=>model.MailAddressTemp)
@Html.ValidationMessageFor(model=>model.MailAddressTemp)
验证是可以的
但是,当我尝试从另一个视图修改邮件地址时
<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>
@LabelFor(model=>model.UserProfile.MailAddress)
@EditorFor(model=>model.UserProfile.MailAddress)
@Html.ValidationMessageFor(model=>model.UserProfile.MailAddress)
它不适用于完全相同的邮件地址
有人能给我解释一下为什么正则表达式验证在子属性上不起作用吗
顺便说一句,在注册和修改帐户期间,我确实对电话号码进行了验证
感谢您让答案更加详细:
不能对嵌套对象进行客户端验证。这里已经描述了类似的问题:您可以做的是创建一个强类型为UserProfile的PartialView,然后将嵌套的UserProfile对象传递给这个PartialView。您还可以使用一些第三方验证库,该库支持对嵌套对象进行客户端验证(例如FluentValidation)。让我困惑的是,它与我的嵌套属性“PhoneNumber”一起工作。我更新了问题我更新了模型,验证工作与电话号码。我不明白的是,邮件地址的验证总是错误的。好吧,我发现了错误。我已将正则表达式提取到一个常量中,以确保使用相同的正则表达式。这就解决了问题。谢谢你的帮助!因此,我确实对我的嵌套属性进行了验证。我很高兴听到这样的消息:)只是为了确保-您的问题与客户端或服务器端验证有关?问题发生在客户端验证上