gpt4 book ai didi

c# - 数据注释上的正则表达式在子属性上的行为不同

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:01 25 4
gpt4 key购买 nike

我的网站上有以下模型

    [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; }
}

当我注册用户时,我有以下 View :

<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>

验证成功

Mail validation during registration

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

<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>

它不适用于完全相同的邮件地址 enter image description here

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

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

谢谢

最佳答案

为了使答案更详尽:

  1. 您不能对嵌套对象进行客户端验证。
  2. 您可以将 DataAnnotations 替换为某些第三方验证库,例如FluentValidatio。
  3. 一般来说,DataAnnotations 用于简单的场景。如果出现像这样带有嵌套对象的更复杂的场景,您可以实现 IValidatableObject 接口(interface)。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com