Как я могу POST сформировать данные из модального загрузчика в бэкэнд?
У меня есть форма для входа и регистрации, которая работает должным образом при использовании в обычном представлении, однако, когда я помещаю эту форму в модальный режим (Bootstrap v3), она не может опубликовать данные (отладчик показывает все поля, которые должны быть нулевыми при отправке),
@model myNamespace.Models.AllUserViewModels
<div class="container">
<div class="modal fade" id="LoginModal" tabindex="-1" role="dialog" keyboard="true" aria-labelledby="LoginModal" aria-hidden="true">
<div class="modal-dialog modal-sm" role="dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4>Login</h4>
</div>
<div class="modal-body">
<form asp-controller="User" asp-action="LoginSubmit" method="post" class="form-group">
<label asp-for="Log.Email">Email</label>
<input asp-for="Log.Email" placeholder="Email Address" class="form-control" id="Email">
<span asp-validation-for="Log.Email"></span>
<label asp-for="Log.Password">Password</label>
<input asp-for="Log.Password" placeholder="Password" class="form-control" id="Password">
<span asp-validation-for="Log.Password"></span>
<span>@ViewBag.loginError</span>
<br>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
</div>
</div>
<!--End Login Modal -->
РЕДАКТИРОВАТЬ Причиной, по которой моя форма не отправлялась на мой контроллер, было то, что я забыл добавить глагол "POST" в метод моего контроллера.
2 ответа
Я разобрался с решением моей проблемы. Причина, по которой мои данные не передавались в бэкэнд, заключалась в том, что в моем контроллере я забыл изменить имя модели представления, которое я использовал в качестве параметра для моего метода, а также забыл изменить ссылки на мою модель при попытке делать звонки по БД, проверку пароля и так далее...
[HttpPost]
[Route("LoginSubmit")]
public IActionResult LoginSubmit(AllUserViewModels model)
{
if (ModelState.IsValid)
{
try
{
// If there are no errors upon form submit check db for proper creds.
User LoggedUser = _context.Users.SingleOrDefault(u => u.Email == model.Log.Email);
var Hasher = new PasswordHasher<User>();
// Check hashed password.
if (Hasher.VerifyHashedPassword(LoggedUser, LoggedUser.Password, model.Log.Password) != 0)
{
// Set user id in session for use in identification, future db calls, and for greeting the user.
HttpContext.Session.SetInt32("LoggedUserId", LoggedUser.Id);
return RedirectToAction("Account");
}
else
{
ViewBag.loginError = "Sorry, your password was incorrect.";
return View("landing");
}
}
// If no proper creds redirect to login page and return error.
catch
{
ViewBag.loginError = "Sorry, your email or password were incorrect.";
return View("landing");
}
}
// If form submit was illegal redirect to login and display model validation errors.
else
{
return View("landing");
}
}
Согласно документации, asp-for
помощник по тегам генерирует id
а также name
атрибуты уже.
Создает атрибуты HTML id и name для имени выражения, указанного в атрибуте asp-for.
Итак, вы должны удалить атрибуты id на входах.
<input asp-for="Log.Password" placeholder="Password" class="form-control">