Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据注释上的正则表达式在子特性上的行为不同_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Data Annotations - Fatal编程技术网

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)
它不适用于完全相同的邮件地址

有人能给我解释一下为什么正则表达式验证在子属性上不起作用吗

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


感谢您让答案更加详细:


  • 不能对嵌套对象进行客户端验证
  • 您可以用第三方验证库(如FluentValidatio)替换DataAnnotation
  • 通常,数据注释用于简单的场景。在嵌套对象的更复杂场景中,您可以实现IValidatableObject接口

  • 不能对嵌套对象进行客户端验证。这里已经描述了类似的问题:您可以做的是创建一个强类型为UserProfile的PartialView,然后将嵌套的UserProfile对象传递给这个PartialView。您还可以使用一些第三方验证库,该库支持对嵌套对象进行客户端验证(例如FluentValidation)。让我困惑的是,它与我的嵌套属性“PhoneNumber”一起工作。我更新了问题我更新了模型,验证工作与电话号码。我不明白的是,邮件地址的验证总是错误的。好吧,我发现了错误。我已将正则表达式提取到一个常量中,以确保使用相同的正则表达式。这就解决了问题。谢谢你的帮助!因此,我确实对我的嵌套属性进行了验证。我很高兴听到这样的消息:)只是为了确保-您的问题与客户端或服务器端验证有关?问题发生在客户端验证上