Я искал, как дурак, но не становится намного умнее за это ..MVC 2 валидация и Entity Framework
В моем проекте я использую Entity Framework 4 и собственные классы POCO и я хочу использовать DataAnnotations
для проверки. Там нет проблем, сколько времени в Интернете о том, как я это делаю. Тем не менее, я считаю, что лучше всего использовать мою проверку в ViewModels и не позволять моим представлениям использовать мои классы POCO для отображения данных. Как я должен делать это плавно? Поскольку мои репозитории возвращают obejekt из моих классов POCO, я пытался использовать AutoMapper, чтобы все работало, но когда я пытаюсь обновить или изменить что-либо в ModelState.IsValid
, все время ложно.
Мой английский действительно плохой, попробуйте показать, как я делаю сегодня, вместо этого: Мой ПОКО
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» нулевым, тогда я пытаюсь изменить?
Я нашел глупую проблему, 'UserViewModel' может быть' AstronomiGuidenModelItem '. –