2012-04-03 13 views
10

Estoy trabajando en mi primer proyecto MVC de ASP.net y tengo algunos problemas para usar formularios múltiples en la misma página. En primer lugar he creado 2 Clase parcial: (* Registro permitirá usuario se registre, * Ingresa que permite al usuario para iniciar sesión.)Múltiples formularios en la misma página ASP.NET MVC

Luego utiliza HTML.render integrarlos en mi "Logpage". Así que tengo que usa 2 acciones diferentes. Como éste:

 [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); 
    } 

El problema que en caso de error Soy redirigir a la nueva página (página blanca contiene Resumen de validación). Así que me pregunto cómo mostrar este mensaje de error en mi página de inicio de sesión predeterminada.

+2

Publica tu código. Siga las guías de formato para obtener instrucciones sobre cómo hacerlo legible. –

+0

¿me puedes explicar? – Chlebta

+0

¿Cuál es exactamente el problema? Si le preocupa la acción POST de formulario, puede tener ambas formas POST para diferentes acciones de controlador. – Tuan

Respuesta

24

Puede resolver esto con tres acciones y un modelo complejo.

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 
    } 
} 

En su código, asegúrese de que se establece la acción de la forma:

@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

FYI, su segundo método POST debe llamarse Registrarse. – Tuan

+0

Esta parte "" "public class LoginOrRegisterViewModel { public Models.RegisterViewModel Register {get; set;} public Models.LoginViewModel Login {get; set;}" "" donde lo puse en Mi clase de modelo ??? } – Chlebta

+0

También lo que es "" LoginOrRegister " – Chlebta

0

Parece que también hay que llamar IsAdmin en la rama Verifyuser, tener que devolver la correcta! Ver:

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

      } 
     } 

la actualidad, que está llamando return View(Model); cuando se tiene un error de ModelState, que devuelve la vista predeterminada para la acción, llamado "Login".

+0

esto no funcionó hay confusión entre el modelo – Chlebta

+0

Luego necesita convertir el modelo al tipo esperado por las vistas del índice, o construirlo, y pasarlo en su lugar Modelo a vista ("Admin/Index") y vista ("Agence /Índice"). – Tuan

+0

Soy principiante i ASP.net MVC ¿me puede explicar más? No entiendo el punto: '( – Chlebta

Cuestiones relacionadas