C# 在用户注册ASP.NET核心MVC身份时检查电子邮件是否存在
我正在尝试检查用户是否输入现有的电子邮件地址并显示ErrorMessage 到目前为止,我是这样做的C# 在用户注册ASP.NET核心MVC身份时检查电子邮件是否存在,c#,asp.net-core-mvc,identity,C#,Asp.net Core Mvc,Identity,我正在尝试检查用户是否输入现有的电子邮件地址并显示ErrorMessage 到目前为止,我是这样做的 public async Task<IActionResult> OnPostAsync(string returnUrl = null) { returnUrl ??= Url.Content("~/"); ExternalLogins = (await _signInManager.GetExternalAuth
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl ??= Url.Content("~/");
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
if (ModelState.IsValid)
{
ApplicationUser user = new()
{
UserName = Input.Email,
Email = Input.Email,
ClientId = Input.ClientId,
StreetAddress = Input.StreetAddress,
City = Input.City,
PostalCode = Input.PostalCode,
Name = Input.Name,
PhoneNumber = Input.PhoneNumber,
Role = Input.Role,
Aktivan = false
};
var emailExist = _db.ApplicationUsers.Any(x => x.Email == Input.Email);
if (emailExist)
{
ModelState.AddModelError("Email", "Korisnicki email vec postoji!");
return Page();
}
var result = await _userManager.CreateAsync(user, Input.Password);
if (result.Succeeded)
{
_logger.LogInformation("User created a new account with password.");
if (!await _roleManager.RoleExistsAsync(SD.Role_Admin))
{
await _roleManager.CreateAsync(new IdentityRole<int>(SD.Role_Admin));
}
if (!await _roleManager.RoleExistsAsync(SD.Role_Manager))
{
await _roleManager.CreateAsync(new IdentityRole<int>(SD.Role_Manager));
}
if (user.Role == null)
{
await _userManager.AddToRoleAsync(user, SD.Role_Manager);
}
else
{
await _userManager.AddToRoleAsync(user, user.Role);
}
//var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
//code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
//var callbackUrl = Url.Page(
// "/Account/ConfirmEmail",
// pageHandler: null,
// values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
// protocol: Request.Scheme);
//await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
// $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
if (_userManager.Options.SignIn.RequireConfirmedAccount)
{
return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl });
}
else
{
if (user.Role == null)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return LocalRedirect(returnUrl);
}
else
{
// admin registering new user
return RedirectToAction("Index", "User", new { Area = "Admin" });
}
}
}
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
// If we got this far, something failed, redisplay form
return Page();
}
}
我还将添加到我的Register视图中
<body class="hold-transition register-page">
<div class="register-box">
<div class="register-logo">
<a href="~/Home"><b>VmS</b>Group</a>
</div>
<div class="card">
<div class="card-body register-card-body">
<form asp-route-returnUrl="@Model.ReturnUrl" method="post">
<h4>Registracija Korisnika</h4>
<hr />
<div class="form-group">
<label>Ime i Prezime</label>
<input asp-for="Input.Name" class="form-control" />
<span asp-validation-for="Input.Name" class="text-danger"></span>
</div>
<div class="form-group">
<label>Adresa</label>
<input asp-for="Input.StreetAddress" class="form-control" />
<span asp-validation-for="Input.StreetAddress" class="text-danger"></span>
</div>
<div class="form-group">
<label>Grad</label>
<input asp-for="Input.City" class="form-control" />
<span asp-validation-for="Input.City" class="text-danger"></span>
</div>
<div class="form-group">
<label>Postanski broj</label>
<input asp-for="Input.PostalCode" class="form-control" />
<span asp-validation-for="Input.PostalCode" class="text-danger"></span>
</div>
<div class="form-group">
<label>Broj telefona</label>
<input asp-for="Input.PhoneNumber" class="form-control" />
<span asp-validation-for="Input.PhoneNumber" class="text-danger"></span>
</div>
<div class="form-group">
<label>Email adresa</label>
<input asp-for="Input.Email" class="form-control" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label>Lozinka</label>
<input asp-for="Input.Password" class="form-control" />
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<label>Potvrdi lozinku</label>
<input asp-for="Input.ConfirmPassword" class="form-control" />
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
@if (User.IsInRole(SD.Role_Admin))
{
<div class="form-group">
<label asp-for="Input.Role">Korisnicka Uloga</label>
@Html.DropDownListFor(m => m.Input.Role, Model.Input.RoleList,
"-Izaberite korisnicku ulogu-", new { @class = "form-control" })
</div>
<div class="form-group">
<label asp-for="Input.ClientId">Klijent</label>
@Html.DropDownListFor(m => m.Input.ClientId, Model.Input.ClientList,
"-Izaberite klijenta-", new { @class = "form-control" })
</div>
<a asp-area="Admin" asp-controller="User" asp-action="Index" class="btn btn-warning" style="width:auto">Nazad</a>
}
<button type="submit" class="btn btn-primary">Registruj se</button>
@*<a asp-area="Admin" asp-controller="User" asp-action="Index" class="btn btn-warning" style="width:auto">Back to User</a>*@
</form>
@if (User.IsInRole(SD.Role_Manager))
{
<a asp-area="Identity" asp-page="/Account/Login" class="text-center">Ukoliko vec imate aktivan korisnicki nalog</a>
}
</div>
</div>
</div>
<script src="~/plugins/jquery/jquery.min.js"></script>
<script src="~/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="~/dist/js/adminlte.min.js"></script>
</body>
科里斯尼卡登记处
我是普雷齐姆
肾上腺
格拉德
波斯坦斯基兄弟酒店
Broj telefona
电子邮件地址
洛津卡
罗津库酒店
@if(User.IsInRole(SD.Role\u Admin))
{
科里斯尼卡乌洛加酒店
@DropDownListFor(m=>m.Input.Role,Model.Input.RoleList,
“-Izaberite korisnicku ulogu-”,新的{@class=“form control”})
克里金
@DropDownListFor(m=>m.Input.ClientId,Model.Input.ClientList,
“-Izaberite klijenta-”,新的{@class=“form control”})
纳扎德
}
注册秘书
@*返回用户*@
@if(User.IsInRole(SD.Role_Manager))
{
我们的目标是实现目标
}
但问题是,当我输入现有的电子邮件地址时,我并没有在注册页面中收到任何错误消息。这里怎么了?我哪里出错了?
var-emailExist=\u db.ApplicationUsers.Any(x=>x.Email==Input.Email)
你能确认这在重复电子邮件中返回true
吗?当然,这是图像。我输入数据库中已经存在的电子邮件,这是当我输入不存在的电子邮件地址时,我不熟悉使用返回页()
,一直在使用返回视图()
,你能确认模型状态
错误列表包含电子邮件错误吗?@Stuart它现在可以工作了。问题出在这里ModelState.addmodeleror(“Input.Email”,“Korisnicki Email vec postoji!”)代码>
<body class="hold-transition register-page">
<div class="register-box">
<div class="register-logo">
<a href="~/Home"><b>VmS</b>Group</a>
</div>
<div class="card">
<div class="card-body register-card-body">
<form asp-route-returnUrl="@Model.ReturnUrl" method="post">
<h4>Registracija Korisnika</h4>
<hr />
<div class="form-group">
<label>Ime i Prezime</label>
<input asp-for="Input.Name" class="form-control" />
<span asp-validation-for="Input.Name" class="text-danger"></span>
</div>
<div class="form-group">
<label>Adresa</label>
<input asp-for="Input.StreetAddress" class="form-control" />
<span asp-validation-for="Input.StreetAddress" class="text-danger"></span>
</div>
<div class="form-group">
<label>Grad</label>
<input asp-for="Input.City" class="form-control" />
<span asp-validation-for="Input.City" class="text-danger"></span>
</div>
<div class="form-group">
<label>Postanski broj</label>
<input asp-for="Input.PostalCode" class="form-control" />
<span asp-validation-for="Input.PostalCode" class="text-danger"></span>
</div>
<div class="form-group">
<label>Broj telefona</label>
<input asp-for="Input.PhoneNumber" class="form-control" />
<span asp-validation-for="Input.PhoneNumber" class="text-danger"></span>
</div>
<div class="form-group">
<label>Email adresa</label>
<input asp-for="Input.Email" class="form-control" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label>Lozinka</label>
<input asp-for="Input.Password" class="form-control" />
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
<div class="form-group">
<label>Potvrdi lozinku</label>
<input asp-for="Input.ConfirmPassword" class="form-control" />
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
@if (User.IsInRole(SD.Role_Admin))
{
<div class="form-group">
<label asp-for="Input.Role">Korisnicka Uloga</label>
@Html.DropDownListFor(m => m.Input.Role, Model.Input.RoleList,
"-Izaberite korisnicku ulogu-", new { @class = "form-control" })
</div>
<div class="form-group">
<label asp-for="Input.ClientId">Klijent</label>
@Html.DropDownListFor(m => m.Input.ClientId, Model.Input.ClientList,
"-Izaberite klijenta-", new { @class = "form-control" })
</div>
<a asp-area="Admin" asp-controller="User" asp-action="Index" class="btn btn-warning" style="width:auto">Nazad</a>
}
<button type="submit" class="btn btn-primary">Registruj se</button>
@*<a asp-area="Admin" asp-controller="User" asp-action="Index" class="btn btn-warning" style="width:auto">Back to User</a>*@
</form>
@if (User.IsInRole(SD.Role_Manager))
{
<a asp-area="Identity" asp-page="/Account/Login" class="text-center">Ukoliko vec imate aktivan korisnicki nalog</a>
}
</div>
</div>
</div>
<script src="~/plugins/jquery/jquery.min.js"></script>
<script src="~/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="~/dist/js/adminlte.min.js"></script>
</body>