Как я могу показать сообщение «Недопустимая попытка входа» в частичном представлении входа в модальное всплывающее окно начальной загрузки без перенаправления на новую страницу входа?

#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);