如何检查ASP.NET MVC 5中客户端是否已存在用户?

时间:2015-02-13 17:29:51

标签: c# asp.net asp.net-mvc asp.net-identity client-side-validation

使用 Visual Studio 2013.4 (Visual Studio 2013 Update 4)我使用个人用户帐户创建了常规 ASP.NET MVC 5 项目验证配置。所有用户注册和登录功能都已由Visual Studio支持,并且工作正常。

如何在注册页面上实施以下规则的客户端验证:目前还没有注册用户使用相同的电子邮件

3 个答案:

答案 0 :(得分:12)

您可以使用RemoteAttribute通过服务器回调执行客户端验证。

1)将以下方法添加到AccountController

[AllowAnonymous]
public async Task<JsonResult> UserAlreadyExistsAsync(string email)
{
    var result = 
        await userManager.FindByNameAsync(email) ?? 
        await userManager.FindByEmailAsync(email);
    return Json(result == null, JsonRequestBehavior.AllowGet);
}

2)将Remote属性添加到Email类的RegisterViewModel属性:

[Remote("UserAlreadyExistsAsync", "Account", ErrorMessage = "User with this Email already exists")]
public string Email { get; set; }

其中"Account"是服务控制器的名称,"UserAlreadyExistsAsync"是它的操作名称。

答案 1 :(得分:0)

这有很多帮助。就我而言,它是一张表,也可以进行更新。在这种情况下,上述解决方案不起作用。所以我想分享我的解决方案。

在下面的解决方案中,我添加了一个附加字段以传递给Controller(模型的主键)。 然后在控制器中我检查是否给出了主键。 如果是这样,我们知道,我们来自更新站点,因为它是我们在模型中已经拥有ID的唯一情况。最后一步是检查字符串和主键是否相同。如果它们都是,那就没关系,因为我们没有改变字符串中的任何内容。如果只有字符串相同而不是ID,则意味着我们更改了字符串并将其更改为另一个现有项字符串,因此我们返回false。

<强>型号:

    [Key]
    [Display(Name = "Idee ID")]
    public int intIdeaID { get; set; }

    [Required(ErrorMessage = "Dieses Feld muss ausgefüllt werden")]
    [Display(Name = "Idee")]
    [Remote("ideaExists", "TabIdea", HttpMethod = "POST", ErrorMessage = "Es wurde bereits eine Idee mit dieser Bezeichnung erstellt", AdditionalFields = "intIdeaID")]
    public string strIdea { get; set; }

<强>控制器:

[HttpPost]
public JsonResult ideaExists(string strIdea, int? intIdeaID)
{
    if (intIdeaID != null)
    {
        if (db.tabIdea.Any(x => x.strIdea == strIdea))
        {
            tabIdea existingTabIdea = db.tabIdea.Single(x => x.strIdea == strIdea);
            if (existingTabIdea.intIdeaID != intIdeaID)
            {
                return Json(false);
            }
            else
            {
                return Json(true);
            }
        }
        else
        {
            return Json(true);
        }
    }
    else
    {
        return Json(!db.tabIdea.Any(x => x.strIdea == strIdea));
    }
}

答案 2 :(得分:0)

{{1}}