Несколько форм на одной странице ASP.net MVC
Я работаю над своим первым проектом ASP.net MVC, и у меня возникли проблемы с использованием нескольких форм на одной странице.
Сначала я создал 2 частичных класса: (* Регистрация позволит пользователю зарегистрироваться, * Вход в систему позволяет пользователю войти в систему.)
Затем я использовал HTML.render для их интеграции в мою "Логарифмическую страницу".
Поэтому у меня есть To использует 2 разных действия. Как этот:
[HttpPost]
public ActionResult Login(LogModel.Login Model)
{
if (ModelState.IsValid)
{
if (LogModel.Login.Verifuser(Model.IDUser, Model.Password))
{
FormsAuthentication.SetAuthCookie(Model.IDUser, false);
if (LogModel.Login.IsAdmin(Model.IDUser, Model.Password))
{
return View("Admin/Index");
}
else
{
return View("Agence/Index");
}
}
else
{
ModelState.AddModelError("", "Invalide username or Password");
return View(Model);
}
}
return View(Model);
}
Проблема, что в случае ошибки я перенаправляюсь на новую страницу (на белой странице содержится сводка валидации). Поэтому я не понимаю, как показать это сообщение об ошибке на моей странице по умолчанию.
Ответы
Ответ 1
Вы можете решить это с помощью трех действий и сложной модели.
public class LoginOrRegisterViewModel
{
public Models.RegisterViewModel Register { get; set; }
public Models.LoginViewModel Login { get; set; }
}
[HttpGet]
public ActionResult Login()
{
return View("Login", new LoginOrRegisterViewModel());
}
[HttpPost]
public ActionResult Register(Models.LoginViewModel model)
{
if(!ModelState.IsValid)
return View("Login", new LoginOrRegisterViewModel(){ Register = model });
else
{
//TODO: Validate the user
//TODO: Write a FormsAuth ticket
//TODO: Redirect to somewhere
}
}
[HttpPost]
public ActionResult Login(Models.RegistrationViewModel model)
{
if(!ModelState.IsValid)
return View("Login", new LoginOrRegisterViewModel(){ Login = model});
else
{
//TODO: CRUD for registering user
//TODO: Write forms auth ticket
//TODO: Redirect
}
}
В своем коде убедитесь, что вы установили действие формы:
@model Models.LoginOrRegisterViewModel
@using(Html.BeginForm("Login", "Controller", FormMethod.Post, new { id = "loginForm"}))
{
@Html.EditorFor(m => Model.Login)
}
@using(Html.BeginForm("Register", "Controller", FormMethod.Post, new { id = "registerForm"}))
{
@Html.EditorFor(m => Model.Register)
}
Ответ 2
Похоже, вам также нужно вызвать IsAdmin в ветке Verifyuser, чтобы он вернул правильный вид:
if (ModelState.IsValid)
{
if (LogModel.Login.Verifuser(Model.IDUser, Model.Password))
{
FormsAuthentication.SetAuthCookie(Model.IDUser, false);
if (LogModel.Login.IsAdmin(Model.IDUser, Model.Password))
{
return View("Admin/Index");
}
else
{
return View("Agence/Index");
}
}
else
{
ModelState.AddModelError("", "Invalide username or Password");
if (LogModel.Login.IsAdmin(Model.IDUser, Model.Password))
return View("Admin/Index", Model);
else
return View("Agence/Index", Model);
}
}
В настоящее время вы вызываете return View(Model);
, когда у вас есть ошибка ModelState, которая возвращает представление по умолчанию для действия под названием "Вход".