【问题标题】:How to check if user already exists on client-side in ASP.NET MVC 5?如何检查用户是否已经存在于 ASP.NET MVC 5 的客户端?
【发布时间】:2015-02-13 17:29:51
【问题描述】:

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

如何在注册页面实现以下规则的客户端验证:没有相同Email的已注册用户

【问题讨论】:

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


    【解决方案1】:

    您可以使用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 属性添加到RegisterViewModel 类的Email 属性:

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

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

    【讨论】:

    • 这正是我一直在寻找的,但它不适用于 twitterbootstrapmvc 库@Html.Bootstrap().TextBoxFor(t =&gt; t.Email).Placeholder("Email Address").ShowValidationMessage(true) //我如何使用 twitterbootstrapmvc hellper 库在客户端验证/调用 i> @Html.ValidationMessageFor(t =&gt; t.Email)
    • 如果我只想在保存操作而不是更新操作时检查用户名,我应该怎么做。
    【解决方案2】:

    这帮助很大。就我而言,它是一张桌子,也可以在其中进行更新。在这种情况下,上述解决方案不起作用。所以我想分享我对这个案例的解决方案。

    在下面的解决方案中,我添加了一个附加字段以传递给控制器​​(模型的主键)。 然后在控制器中,我正在检查是否给出了主键。 如果是这样,我们知道,我们来自更新站点,因为这是我们在模型中已经拥有 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));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 2015-06-17
      • 2016-08-08
      • 2012-02-04
      • 2017-03-15
      相关资源
      最近更新 更多