Я использую шаблон Microsoft по умолчанию для страниц регистрации и входа. Я объединил обе страницы в одном представлении. Когда я регистрирую нового пользователя, веб-сайт работает, и страница индекса появляется, но когда я пытаюсь войти в систему, он говорит, что я пытаюсь передать loginViewModel вместо ViewModel. Я не могу понять, почему ошибка появляется, но я не могу понять, почему работает для регистрации, а не для входа, так как я использую одинаковый подход для обеих страниц. Может кто-нибудь помочь мне исправить это?
Вот мой код:
Вид входа:
@using my_app.Models
@model my_app.Models.ViewModel
<div class="split right">
<div class="hold-transition login-page img-bg-mine" background="~/imgs/dog3.jpg">
<div class="centeredright">
<div class="login-box">
<div class="login-logo">
<a href="../../index2.html"><b>Pet</b>Care</a>
</div>
<!-- /.login-logo -->
<div class="login-box-body">
<p class="login-box-msg">Login to start your session</p>
@Html.Partial("_Login")
</div>
</div>
</div>
</div>
</div>
<div class="split left">
<div class="hold-transition login-page img-bg-mine" background="~/imgs/dog3.jpg">
<div class="centeredleft">
<div class="login-box">
<div class="login-logo">
<a href="../../index2.html"><b>Pet</b>Care</a>
</div>
<!-- /.login-logo -->
<div class="login-box-body">
<p class="login-box-msg">Register to start your session</p>
@Html.Partial("_Register")
</div>
</div>
</div>
</div>
</div>
Контроллер:
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
var model1 = new ViewModel();
if (!ModelState.IsValid)
{
return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
ViewBag.RoleList = new SelectList(context.Roles.ToList(), "Id", "Name");
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
//After he signs in check his role and you will redirect him to the correct page
//User.IsInRole use this(returns true or false)
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
// return RedirectToAction("Index", "Home");
}
}
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.UserName, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
// var role = dbContext.AspNetRoles.Find(Convert.ToInt32(model.Role));
//var role = new IdentityRole(model.Role.Name);
//I added this line to store the user and its roles in AspNetUserRoles table:
await UserManager.AddToRoleAsync(user.Id, model.Role);
//result = await UserManager.AddToRoleAsync(user.Id, model.Role);
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
// For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
// Send an email with this link
// string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
// var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
// await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
//Assign Role to user Here
// await this.UserManager.AddToRoleAsync(user.Id, model.Role);
return RedirectToAction("Index", "Home");
}
IEnumerable<SelectListItem> items = dbContext.AspNetRoles.Select(c => new SelectListItem { Value = c.Id, Text = c.Name });
ViewBag.RoleList = items;
AddErrors(result);
}
// If we got this far, something failed, redisplay form
LoginViewModel mod = new LoginViewModel();
return View("Login");
}
Модель:
public class ViewModel
{
public LoginViewModel LoginModel { get; set; }
public RegisterViewModel RegisterModel { get; set; }
}