Я искал как дурак, но не стал намного умнее для этого ..
В моем проекте я использую Entity Framework 4 и собственные классы PoCo, и я хочу использовать DataAnnotations
для проверки.Нет проблем, есть сколько угодно времени в интернете о том, как я это делаю.Однако я чувствую, что лучше вместо этого иметь мою проверку в ViewModels и не позволять моим представлениям использовать мои классы POCO для отображения данных.Как я должен сделать это гладко?Так как мои репозитории возвращают obejekt из моих классов POCO, я пытался использовать AutoMapper, чтобы заставить все работать, но когда я пытаюсь что-либо обновить или изменить что-либо в ModelState.IsValid
, все время ложно.Плохо, попробуйте показать, как я делаю сегодня вместо этого: мой POCO
public partial User {
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
и мой 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; }
}
Контроллер:
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);
}
Я заметилтеперь, когда моя проверка работает нормально, но мои значения равны нулю, когда я пытаюсь отправить и обновить базу данных.У меня есть одна основная ViewModel, которая выглядит следующим образом:
public class AstronomiGuidenModelItem<T> : AstronomiGuidenModel {
public T Item { get; set; }
}
Почему мой «UserViewModel viewModel» пуст, тогда я пытаюсь изменить?