Estoy desarrollando una aplicación ASP.NET MVC 3, estoy usando el código entidad marco primero para crear las clases de mi aplicación, y también tengo un repositorio para realizar las operaciones en él, manteniendo limpias las definiciones DBContext y DBEntities.ASP.NET MVC - crear un nuevo modelo o utilizar una clase de estructura Entity
Mi duda es sobre el procesamiento de las vistas y la forma en que se guarda un modelo de edición.
Si tengo esta entidad que representa a un usuario almacenado en mi DB:
//Entity:
public class User
{
[Key]
public int IdUser { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
Y quiero mostrar una vista con el Nombre, Apellidos, Correo electrónico y contraseñaNueva, ConfirmPasword y CurrentPassword, a fin de permitir el usuario cambia sus datos, escribiendo CurrentPassword para confirmar los cambios, entonces mi duda es que fieds como ConfirmPasword y CurrentPassword no están en mi entidad, así que necesito crear un nuevo modelo para esta vista y copiar la información que quiero de mi nuevo modelo a mi entidad de base de datos para guardarlo? Al igual que:
public class UpdateUserModel
{
[Required]
[Display(Name = "Name")]
public string FirstName{ get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName{ get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Not valid email")]
public string Email { get; set; }
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPasword{ get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm the New Pasword")]
[Compare("NewPasword", ErrorMessage = "Password doesn´t mach.")]
public string ConfirmPasword{ get; set; }
[Required(ErrorMessage = "Need to specify the current password to save changes")]
[DataType(DataType.Password)]
[Display(Name = "Current Password")]
public string CurrentPassword { get; set; }
}
y en el controlador que hice:
public ActionResult UpdateUser(UpdateUserModel model)
{
User u = (User)Membership.GetUser();
u.FirstName = model.FirstName;
u.LastName = model.LastName;
u.Email = model.Email;
if (!String.IsNullOrEmpty(model.NewPassword))
{
u.Password = FormsAuthentication.HashPasswordForStoringInConfigFile(model.NewPassword.Trim(), "md5");
}
repository.UpdateUser(u);
return View();
}
Hay alguna manera de hacer esto que tiene un controlador como:
public ActionResult UpdateUser(User u)
{
repository.UpdateUser(u);
return View();
}
Porque si tengo que, como me puede agregar el campo como, ConfirmPassword o CurrentPassword para realizar la validación de esta Vista específica.
Ok, lo entiendo. Como he entendido, es mejor crear un nuevo modelo para cada vista y luego asignarlo a la entidad. ¿Qué significa // Campos originales, en esta clase se supone que son los metadatos con la validación y esas cosas no? ¿Esto cambiará mi modelo de MVC a MVVM o no porque todavía tengo un controlador? Acerca de la Automaper, ¿está utilizando https://github.com/AutoMapper/AutoMapper? – juan25d
Consulte la actualización 1 –
Entonces, ¿dónde debería escribir la validación y los metadatos? en la clase UserViewModel isnt't? – juan25d