0
我玩弄服務器端表單驗證,模型綁定和ModelState中,我發現了以下問題:ASP MVC - 表格輸入類型和模型綁定問題
- 如果我有類型的輸入「電子郵件「,我插入一個無效的電子郵件地址(如'hello'),模型綁定不起作用 - 值爲 顯示爲'null'。
- 但是,如果我插入一個有效的電子郵件地址, 一切正常。
有人可以向我解釋爲什麼會發生這種情況嗎? 在此先感謝!
表:
<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("[email protected]", "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驗證的,它不應該允許提交,它會告訴你一個消息無效的電子郵件,它不會驗證的唯一方法是當它是空的,但你的輸入是必需的,所以它也會驗證空。這很奇怪 – Munzer
Tieson T - 只是改變它,問題仍然存在(模型綁定只在電子郵件地址有效時纔有效); Munzer - 你在談論客戶端驗證?它是因爲我添加到ng-submit指令中的AngularJS $無效而傳遞的(我這樣做只是爲了能繞過客戶端驗證和測試服務器端驗證) – Acla