仅显示一个寄存器错误而不是两个

时间:2016-08-11 11:28:00

标签: asp.net asp.net-mvc asp.net-identity

我有一个ASP.Net MVC网站,它使用ASP.Net Identity来管理用户。

我使用默认机制,即用户的电子邮件也是他的用户名。当用户想要注册已经使用的电子邮件时,会显示两条错误消息:

  • 名称myEmail@gmail.com已被采用。
  • 电子邮件'myEmail@gmail.com'已被拍摄。

登记表格的结构:

How the Register form looks like

AccountController的HttpPost注册方法:

public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser {UserName = model.Email, Email = model.Email};
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            string callbackUrl =
                await SendEmailConfirmationTokenAsync(user.Id, "Confirm your account");

            return View("Info");
        }
        AddErrors(result);
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

如何才向用户显示电子邮件错误消息?

1 个答案:

答案 0 :(得分:1)

将您的AddErrors()方法替换为

ModelState.AddModelError("", String.Format("{0} is already taken", model.Email))

或者,如果您在视图中包含@Html.ValidationMessageFor(m => m.Email)并希望消息与表单控件相关联,而不是在摘要中

ModelState.AddModelError("Email", String.Format("{0} is already taken", model.Email))

附注:您可能还需要考虑使用RemoteAttribute,以便在提交表单之前获得客户端验证 - 请参阅How to: Implement Remote Validation in ASP.NET MVC(尽管您也应该将代码保留在上面(罕见) )case 2用户同时提交相同的Email