首页 > 解决方案 > 如何在登录时检查电子邮件是否存在于数据库 - 剃须刀页面中?

问题描述

我希望站点登录表单检查电子邮件是否在系统中,以返回错误消息。我不能这样做,因为我是新人。我试着做一些我认为这是方向的事情,如果你能帮助我,我会很高兴。

public class ConnectionAttribute : ValidationAttribute
    {

        private readonly OrderContext _context;

        private readonly string _connectingMail;
        public ConnectionAttribute(string connectingMail)
        {
            _connectingMail = connectingMail;
        }

        protected override ValidationResult IsValid(
       object value, ValidationContext validationContext)
        {
            List<Customer> allCustomers = _context.Customer.ToList();
            List<string> allMails = new List<string>();
            foreach (var item in allCustomers)
            {
                allMails.Add(item.CustomerMail);
            }
            var file = value as string;
            if (allMails.Contains(_connectingMail))
            {
                    return new ValidationResult(GetErrorMessage());
             
            }

            return ValidationResult.Success;
        }

        public string GetErrorMessage()
        {
            return $".";
        }

    }

我认为这段代码是正确的,但我不知道点击 connect 后该怎么称呼它。你能叫他什么?

标签: asp.net-corerazor-pages

解决方案


您可以尝试使用远程验证。

首先,ASP.NET (Core) 中的远程验证依赖于 Unobtrusive AJAX,因此您需要先安装它。最简单的方法是通过 LibMan。请检查wwwroot/lib文件夹是否已安装它们。如果没有安装,请参考以下步骤:

请右键单击 中的 lib 文件夹wwwroot,选择Add» Client-side Library,然后选择jsdelivr作为源,然后输入jquery-ajax-unobtrusive.

其次,由于您的应用程序是一个 Asp.net Core Razor 应用程序,因此在 PageModel 中,添加带有 PageRemote 属性的 Email 属性和一个 OnPostCheckEmail 方法来检查电子邮件是否存在:

public class RemoteValidateModel : PageModel
{
    [PageRemote(ErrorMessage = "Email Address already exists", AdditionalFields = "__RequestVerificationToken",
        HttpMethod = "post",PageHandler = "CheckEmail")]
    [BindProperty]
    public string Email { get; set; }
    public void OnGet()
    {
    }
    //this method is used to check whether the email is exist or not.
    public JsonResult OnPostCheckEmail()
    {
        //query the database and get all existing Emails or directly check whether the email is exist in the database or not.
        var existingEmails = new[] { "jane@test.com", "claire@test.com", "dave@test.com" };
        var valid = !existingEmails.Contains(Email);
        return new JsonResult(valid);
    }
}

Razor 页面中的代码:

@page
@model RazorSample.Pages.RemoteValidateModel
@{
}
<form method="post">
    <input asp-for="Email" />
    <span asp-validation-for="Email" class="text-danger"></span><br>
    <input type="submit" />
</form>
@section scripts{
    <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <partial name="_ValidationScriptsPartial" />
    <script src="~/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.min.js"></script>
}

然后,结果如下:

在此处输入图像描述

更多详细信息,请查看本教程:

Razor 页面中的远程验证

此外,如果你想在 Asp.net Core MVC 应用程序中使用远程验证,你可以检查[Remote] 属性


推荐阅读