Я немного сбит с толку относительно правильного способа сохранения изменений в моем объекте редактирования модели в ASP.NET MVC 3 с использованием EF4, особенно когда я хочу выполнить некоторую очистку на стороне сервера непосредственно перед сохранением.Мой метод действия:
[HttpPost]
public ActionResult Edit(int id, EmployeeEditModel employeeEditModel) {
var originalEmployee = db.Employees.Single(c => c.Id == id);
// if I don't do this here, I can't check for complex model errors that follows
employeeEditModel.Employee.LastHireDate = employeeEditModel.Employee.LastHireDate.Date;
employeeEditModel.Employee.EmployeeNumber = employeeEditModel.Employee.EmployeeNumber.ToUpper();
if (employeeEditModel.Employee.LastHireDate < employeeEditModel.Employee.OriginalHireDate) {
ModelState.AddModelError("Employee.LastHireDate", "Last Hire Date cannot occur before Original Hire Date.");
}
if (ModelState.IsValid) {
UpdateModel(originalEmployee, "Employee");
// if I don't do this here, these changes won't be saved
originalEmployee.LastHireDate = originalEmployee.LastHireDate.Date;
originalEmployee.EmployeeNumber = originalEmployee.EmployeeNumber.ToUpper();
db.SaveChanges();
return RedirectToAction("Index");
}
return View(getEmployeeEditModel(id));
}
Вы можете видеть, что я хочу очистить пару элементов, таких как удаление части времени в поле DateTime
, преобразование другого в верхний регистр и удаление пробела из другогоне показано).Это типичный пример некоторых полей, которые я могу санировать, и мне не нужно беспокоить пользователя.Проблема в том, что мне приходится делать это дважды в коде, в котором я оказался (см. Комментарии в коде).Я обновляю модель редактирования, которая содержит несколько объектов, которые логически хранятся в отдельных таблицах.
Этот код работает, но я не знаю, каким он должен быть.Должен ли я использовать UpdateModel()
или что-то еще в этой ситуации?Как мне избежать повторения чистки обоих предметов?