Sto sviluppando un'applicazione ASP.NET MVC 3, sto utilizzando il codice del framework di entità prima per creare le classi della mia app e ho anche un repository per eseguire le operazioni su di esso, mantenendo pulite le definizioni di DBContext e DBEntities.ASP.NET MVC: crea un nuovo modello o utilizza una classe Entity
Il mio dubbio riguarda il rendering delle viste e il modo in cui viene salvato un modello di modifica.
Se ho questa entità che rappresentano un utente memorizzate nel mio 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; }
}
e voglio mostrare una vista con il Nome, Cognome, Email e NuovaPassword, ConfirmPasword e CurrentPassword, in modo da permettere l'utente cambia i suoi dati, digitando CurrentPassword per confermare le modifiche, quindi il mio dubbio è che arci come ConfirmPasword e CurrentPassword non sono nella mia entità quindi ho bisogno di creare un nuovo modello per questa vista e copiare le informazioni che voglio da il mio nuovo modello alla mia entità di database per salvarlo? Come:
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; }
}
e nel controller ho fatto:
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();
}
Non ci sono alcun modo di fare questo con un controller simile:
public ActionResult UpdateUser(User u)
{
repository.UpdateUser(u);
return View();
}
Perché se ho che, come ho puoi aggiungere il campo come, ConfirmPassword o CurrentPassword per fare la convalida per questa specifica vista.
Ok, ho capito. Come ho capito è meglio creare un nuovo modello per ogni vista e quindi mapparlo nell'entità. Cosa significa // I campi originali, in questa classe si suppone che siano i metadati con la convalida e che roba non lo è? Questo cambierà il mio modello da MVC a MVVM o meno perché ho ancora un controller? Informazioni su Automaper, stai utilizzando https://github.com/AutoMapper/AutoMapper? – juan25d
Vedere l'aggiornamento 1 –
Quindi dove dovrei scrivere la convalida e i metadati? nella classe UserViewModel isnt't? – juan25d