#asp.net #asp.net-mvc #asp.net-identity
Вопрос:
У меня есть модальное всплывающее окно начальной загрузки, которое имеет два частичных вида входа и регистрации
Когда я ввожу неправильный пароль, он должен показывать мне «Недопустимую попытку входа» в частичном представлении всплывающего входа, но перенаправляет меня на другую страницу частичного просмотра нового входа (
Как я могу это исправить? Я хочу, чтобы сообщение «Неверная попытка входа» отображалось во всплывающем окне входа без перенаправления на другую страницу?
Код для входа
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
//[ChildActionOnly]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return RedirectToAction("Index", "Home",
new { area = "Landing" });
//return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email,
model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
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 PartialView("_Login",model);
}
}
Комментарии:
1. Неважно, возвращает ли он представление(модель) или частичное представление(модель), он дает тот же результат — перенаправление на новую страницу _Login.cshtml-страницу
2. Ну, если вы используете код позади и сообщение назад, то я не вижу, как всплывающее диалоговое окно на основе jQuery. Пользовательский интерфейс или даже диалоговое окно начальной загрузки, которое сохранит ответную публикацию? В тот момент ,когда вы делаете ответную публикацию, страница перемещается на сервер, запускается код, а затем вы получаете новую новую веб — страницу-и ваш диалог ДАВНО исчез. Вы должны принять вызов веб-службы ajax и сбросить резервные копии. Или просто используйте целую страницу — и не используйте всплывающее диалоговое окно — на ваш выбор.
Ответ №1:
Эта часть вашего кода неверна:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return PartialView("_Login",model);
Вы не можете вернуть a PartialView
, так как ActinoResult
вам пришлось бы вернуть a View
Вам нужно вернуть то View
же самое, что и на странице входа в систему, но добавьте ошибку модели, и на странице входа отобразится ошибка модели, поэтому сначала здесь:
// if ModelStat is not valid, then the Model already has the Validation error
if (!ModelState.IsValid)
{
return View(model); // <-- returns the same View (Login View)
}
И здесь вам нужно что-то вроде этого:
default:
// login has failed, add the Model error and return to the same Login View
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View(model);