J'ai cherché comme un fou, mais ne va pas beaucoup plus intelligent pour elle ..MVC 2 cadre de validation et de l'entité
Dans mon projet, j'utiliser Entity Framework 4 et propres classes PoCo et je veux utiliser DataAnnotations
pour validation. Aucun problème là, c'est combien de temps sur Internet sur la façon dont je le fais. Cependant, je pense qu'il vaut mieux avoir ma validation dans ViewModels et ne pas laisser mes vues utiliser mes classes POCO pour afficher des données. Comment dois-je faire cela en douceur? Depuis mes dépôts renvoie obejekt de mes classes POCO j'ai essayé d'utiliser AutoMapper pour obtenir tout pour travailler mais quand j'essaie de mettre à jour ou de changer quoi que ce soit dans le ModelState.IsValid
est faux tout le temps ..
Mon anglais est vraiment mauvais, essayez de montrer comment je fais à la place aujourd'hui: mon POCO
public partial User {
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
Et mon ViewModel
public class UserViewModel {
public int Id { get; set; }
[Required(ErrorMessage = "Required")]
public string UserName { get; set; }
[Required(ErrorMessage = "Required")]
public string Password { get; set; }
}
Controller:
public ActionResult Edit(int id) {
User user = _userRepository.GetUser(id);
UserViewModel mappedUser = Mapper.Map<User, UserViewModel>(user);
AstronomiGuidenModelItem<UserViewModel> result = new AstronomiGuidenModelItem<UserViewModel> {
Item = mappedUser
};
return View(result);
}
[HttpPost]
public ActionResult Edit(UserViewModel viewModel) {
User user = _userRepository.GetUser(viewModel.Id);
Mapper.Map<UserViewModel, User>(viewModel, user);
if (ModelState.IsValid) {
_userRepository.EditUser(user);
return Redirect("/");
}
AstronomiGuidenModelItem<UserViewModel> result = new AstronomiGuidenModelItem<UserViewModel> {
Item = viewModel
};
return View(result);
}
J'ai remarqué que ma validation fonctionne correctement, mais mes valeurs sont nulles lorsque j'essaie d'envoyer et de mettre à jour la base de données. J'ai une principale ViewModel qui ressemble à ceci:
public class AstronomiGuidenModelItem<T> : AstronomiGuidenModel {
public T Item { get; set; }
}
Pourquoi r mon « UserViewModel viewmodel » null alors je tente de modifier?
J'ai trouvé le problème idiot, 'UserViewModel' devrait être' AstronomiGuidenModelItem '. –