【发布时间】:2017-05-27 21:13:08
【问题描述】:
我正在玩服务器端表单验证、模型绑定和 ModelState,我注意到以下几点:
- 如果我有“电子邮件”类型的输入并且我插入了无效的电子邮件 地址(例如'hello'),模型绑定不起作用 - 值 显示为“空”。
- 但是,如果我插入一个有效的电子邮件地址, 一切顺利。
有人可以向我解释为什么会这样吗? 提前致谢!
表格:
<form name="contactForm" id="contactF" ng-controller="Contacts" ng-submit="contactForm.$invalid ? sendMessage() : return;" novalidate>
<input type="email" name="email" ng-model="model.EmailAddress" required placeholder="Email"/>
<div ng-messages="contactForm.email.$error" ng-if="contactForm.email.$touched || contactForm.$submitted">
<div ng-messages-include="/Helpers/error-messages.html"></div>
</div>
<textarea name="message" ng-model="model.message" required placeholder="Escreva a sua mensagem aqui."></textarea>
<div ng-messages="contactForm.message.$error" ng-if="contactForm.message.$touched || contactForm.$submitted">
<div ng-messages-include="/Helpers/error-messages.html"></div>
</div>
<br />
<input type="submit" value="Enviar"/>
</form>
型号:
public class HomeContactVM
{
[Required(ErrorMessage = "Error message here")]
public string Name { get; set; }
[Required(ErrorMessage = "Error msg here.")]
[EmailAddress(ErrorMessage = "Please use a valid email address.")]
public string EmailAddress { get; set; }
[Required(ErrorMessage = "Error msg here.")]
public string Message { get; set; }
}
动作方法:
[HttpPost]
public JsonResult Contact(HomeContactVM model)
{
string message;
if (ModelState.IsValid)
{
using (SmtpClient client = new SmtpClient())
{
MailMessage msg = new MailMessage()
{
Body = model.Message,
BodyEncoding = Encoding.UTF8,
Subject = "New message from " + model.EmailAddress,
From = new MailAddress(model.EmailAddress),
Sender = new MailAddress("xxx@gmail.com", "xx")
};
int retries = 5;
bool retry = true;
while (retry)
{
try
{
client.Send(msg);
message = "Your message was sent.";
return Json(message, JsonRequestBehavior.AllowGet);
}
catch (Exception)
{
if (retries > 0) {
retries--;
}
else {
retry = false;
message = "Something went wrong. Please try again later.";
return Json(message, JsonRequestBehavior.AllowGet);
}
}
}
}
}
message = "Your model is not valid.";
return Json( message, JsonRequestBehavior.AllowGet);
}
【问题讨论】:
-
您的模型属性是
EmailAddress,但输入名称是email- 其中一个不正确。 -
您的输入类型是电子邮件,无论如何它是如何通过 html 验证的,它不应该允许提交。,它会向您显示一条消息无效电子邮件,它不会验证的唯一方法是什么时候它是空的,但您的输入是必需的,因此它也将验证为空。这很奇怪
-
Tieson T - 只是更改了它,问题仍然存在(模型绑定仅在电子邮件地址有效时才有效); Munzer - 你在谈论客户端验证?它通过了,因为我在 ng-submit 指令中添加了 AngularJS $invalid(我这样做只是为了绕过客户端验证并测试服务器端验证)
标签: asp.net-mvc html