Asp.net это сложно
Столкнулся с проблемой
InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'Microsoft.AspNetCore.Identity.IdentityError', but this ViewDataDictionary instance requires a model item of type 'SportGym.ViewsModel.RegistrationViewModel
Требует модель которую я и так использую, как так почему так не пойму
Контроллер для логина и регистрации пользователя, ниже там пипец не могу поменять никак отдельно сделать html в RegistrationViewModel
по идее больше и неизачего проблемам быть, нажимаю кнопку Зарегистрироваться и на методе пост и вылазит ошибка
Вроде все написал
AccountController.cs
public class AccountController : Controller
{
private readonly UserManager<Clients> _userManager;
private readonly SignInManager<Clients> _signInManager;
public AccountController(UserManager<Clients> userManager, SignInManager<Clients> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
[HttpGet]
public IActionResult Login()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false ,lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View("Login", model);
}
return View(model);
}
private IAuthenticationManager AuthenticationManager
{
get
{
return (IAuthenticationManager)HttpContext.AuthenticateAsync();
}
}
[HttpGet]
public IActionResult Register()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegistrationViewModel model)
{
if (ModelState.IsValid)
{
var client = new Clients
{
FullName = model.FullName,
Date = model.Date,
Phone = model.Phone,
Email = model.Email,
Gender = model.Gender,
Role = "Client",
UserName = model.Email
};
var result = await _userManager.CreateAsync(client, model.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(client, isPersistent: false);
return RedirectToAction("Login", "Account");
}
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
return View(error);
}
}
return View(model);
}
RegistrationViewModel
public class RegistrationViewModel
{
[Required(ErrorMessage = "Введите ФИО")]
[Display(Name = "ФИО")]
public string FullName { get; set; }
[Required(ErrorMessage = "Введите дату рождения")]
[Display(Name = "Дата рождения (00.00.0000")]
public string Date { get; set; }
[Required(ErrorMessage = "Введите телефон")]
[Display(Name = "Телефон")]
public string Phone { get; set; }
[Required(ErrorMessage = "Введите адрес электронной почты")]
[EmailAddress(ErrorMessage = "Введите корректный адрес электронной почты")]
[Display(Name = "Email")]
public string Email { get; set; }
[Required(ErrorMessage = "Введите пол")]
[Display(Name = "Пол")]
public string Gender { get; set; }
[Required(ErrorMessage = "Введите пароль")]
[StringLength(100, ErrorMessage = "Пароль должен быть от {2} до {1} символов", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Пароль")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Подтвердите пароль")]
[Compare("Password", ErrorMessage = "Пароль и подтверждение пароля не совпадают")]
public string ConfirmPassword { get; set; }
}
Register.cshtml
```@model SportGym.ViewsModel.RegistrationViewModel@{ ViewData["Title"] = "Регистрация"; }```
<div class="form-group">
<label asp-for="Date" class="control-label"></label>
<input asp-for="Date" class="form-control" />
<span asp-validation-for="Date" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Phone" class="control-label"></label>
<input asp-for="Phone" class="form-control" />
<span asp-validation-for="Phone" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Email" class="control-label"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Gender" class="control-label"></label>
<input asp-for="Gender" class="form-control" />
<span asp-validation-for="Gender" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Password" class="control-label"></label>
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="ConfirmPassword" class="control-label"></label>
<input asp-for="ConfirmPassword" class="form-control" />
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Register" class="btn btn-primary" />
</div>
Ответы (1 шт):
Пытался отправить ошибку, которой вроде нет, убрал вот это и всё заработало:
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
return View(error);
}