Допустим, у меня есть форма со следующим «бизнес-объектом»:
public class MyObject
{
public string Name { get; set; }
public User OtherUser { get; set; }
public DateTime CreateDate { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
}
Когда пользователь вводит данные в любое из полей, мне нужно выполнить обход туда, куда они ввеличтобы разрешить им исправлять любые жирные пометки и тому подобное, без необходимости повторного ввода их ответа.
Поскольку я не могу в обратном порядке обработать значение типа «31 февраля 2011» в поле DateTime
, я заканчиваюиспользуя View Model объект, подобный этому:
public class MyObjectViewModel
{
public string Name { get; set; }
public string OtherUserName { get; set; }
public string CreateDate { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
}
Хорошо, все в порядке и превосходно, я могу заставить это отображать точно так же, как пустой бизнес-объект и круглые значения-приступить к использованию следующего шаблона:
public ActionResult Create(FormCollection form)
{
var model = new MyObjectViewModel();
if (TryUpdateModel(model, form) && ModelState.IsValid)
{
// ...
}
return View(model);
}
У меня возникли следующие вопросы:
- Какой самый чистый способ вывести данные из модели представления в бизнесОбъект?(т.е. что заполняет остальную часть метода выше?)
- Можно ли уменьшить дублирование имен полей между объектами, чтобы объединить мои изменения?
- В приведенном выше примереполе
OtherUserName
- это string
, которое необходимо преобразовать в User
объект.Чья это ответственность?Контроллер?ViewModel?Модельный переплет?