在视图中显示验证消息(jQuery验证)

时间:2013-08-15 20:48:56

标签: c# asp.net-mvc-4 razor

目标

使用jQuery验证在View上显示自定义错误。

问题

一切都运作良好。是的......一切!我需要的是解决问题的方法。我已经在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模型追踪潜行高峰:

[...]

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

[...]

1 个答案:

答案 0 :(得分:0)

假设你有一个方法来检查用户并返回一个bool(true | false), 根据返回值,您将使用以下内容。

 if (!_userService.GetUser("userName"))
  {
    ModelState.AddModelError("UserName", "Account not found");
    return View();
  }