asp.net-core - 如何在登录时检查电子邮件是否存在于数据库 - 剃须刀页面中?
问题描述
我希望站点登录表单检查电子邮件是否在系统中,以返回错误消息。我不能这样做,因为我是新人。我试着做一些我认为这是方向的事情,如果你能帮助我,我会很高兴。
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 (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>
}
然后,结果如下:
更多详细信息,请查看本教程:
此外,如果你想在 Asp.net Core MVC 应用程序中使用远程验证,你可以检查[Remote] 属性。