目标
使用 jQuery 验证在视图上显示自定义错误。
问题
一切运作良好。是的……一切!我需要的是解决问题的灯。我已经在 Google 和 Stack 上搜索过,但直到现在都没有成功。
好的,让我们开始吧:我的由电子邮件和密码组成的登录表单验证良好——如果电子邮件无效或密码字段为空,它会抛出一条消息。但我需要的是:如果数据库中不存在电子邮件+密码组合,或者换句话说,如果用户不存在,则抛出一条消息。
看看下面的片段:
[...]
[AcceptVerbs(HttpVerbs.Post)]
[ValidateAntiForgeryToken]
[AllowAnonymous]
public ActionResult Authenticate(User userModel)
{
if (ModelState.IsValid)
{
if (userModel.IsValid(userModel.Email, userModel.Password))
{
FormsAuthentication.SetAuthCookie(userModel.Email, userModel.Remember);
return RedirectToAction("Index");
}
else
{
ModelState.AddModelError(String.Empty, "Login data is incorrect!");
}
}
return View(userModel);
}
[...]
注意这一行:
ModelState.AddModelError(String.Empty, "Login data is incorrect!");
我想在视图中显示“ Login data is incorrect!
”,但我不知道该怎么做。
代码聚焦
我正在使用 jQuery Validation Unobtrusive,仅此而已 - 仅此而已。我刚刚调用了脚本,应用程序继续运行。
顺便说一句,如有必要,请遵循一些标记:
[...]
@using (Ajax.BeginForm("Authenticate", "Manager",
new AjaxOptions{ HttpMethod = "Post" })){
<ul>
<li>
@Html.LabelFor(m => m.Email, "What's your email?")
@Html.TextBoxFor(m => m.Email, "", new { placeholder = "Email" })
@Html.ValidationMessageFor(m => m.Email)
</li>
<li>
@Html.LabelFor(m => m.Password, "What's your password?")
@Html.TextBoxFor(m => m.Password, "", new { placeholder = "Password" })
@Html.ValidationMessageFor(m => m.Password)
</li>
<li>
@Html.CheckBoxFor(m => m.Remember)
Remember
</li>
<li>
<button type="submit" class="btn btn-primary">Log In</button>
</li>
</ul>
}
[...]
要记住
我只是调用 jQuery Validation 的脚本和我在模型属性顶部标记为注释的(简单)验证就像魔术一样工作。
User
为了提高对问题的理解,请通过's 模型进行潜行:
[...]
[Required]
[EmailAddress]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[...]