【发布时间】:2016-10-03 06:24:06
【问题描述】:
这是位于我的视图模型中的一个字段:
[Required(ErrorMessage = "Email is missing."), EmailAddress(ErrorMessage = "Email is not valid.")]
public string Email { get; set; }
(EmailAddress 来自 EmailAddressAttribute.EmailAddressAttribute() 类型)
这是 HTML 中的相关部分:
<div>
<label for="inputEmail">EMAIL</label>
<input id="inputEmail" ng-model="email" asp-for="Email" class="form-control" />
</div>
<div>
<span asp-validation-for="Email" class="text-danger"></span>
</div>
当我在电子邮件文本框中输入myemail 时,它会说
电子邮件无效
但是,当输入myemail@email 时,视图模型会认为它是正确的(仅在前端)。
public async Task<JsonResult> Register([FromForm]VisitViewModel vm)
这样的投射正确地将ModelState设置为无效并拒绝电子邮件,所以这部分没问题。
不过根据this answer,前端应该指出这是无效的
谁能解释这里发生了什么?我完全不知所措。
【问题讨论】:
-
我认为电子邮件是有效的:3
-
'myemail@email' 对你有效吗?看起来很奇怪,因为它后面没有 '.net' 或 '.com' 或其他任何东西,但您可能会认为这不是重点,因为在这种情况下,EmailAddressAttribute 应该返回 false。 (它在后端正确,“myemail@email”在那里无效,但在前端有效)
-
如果一开始就知道错了,为什么不改前端的validator呢。使用 javascript 很容易验证它
-
因为我在 ASP.net 核心中工作,如果出于某种原因我想将电子邮件字段更改为文本或数字字段,它应该自行更改验证或与此字段相关的任何其他内容.我不应该进入每个 javascript 文件并自己更改它。我知道如何让它工作,但不知道如何让它正常工作。
-
我确认我在我的应用程序中尝试使用 myemail@email 得到了相同的结果,因此它要么是错误,要么被认为是有效的电子邮件。我认为在任何情况下通过发送确认链接来验证电子邮件很重要,但这是一个有趣的问题,我想知道微软是否认为这是一个错误
标签: c# asp.net-core asp.net-core-mvc email-validation asp.net-mvc-viewmodel