Допустим, у меня есть форма со следующим «бизнес-объекта» в виду:кругооборота просмотр данных в ASP.NET MVC при использовании модели Биндеры
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; }
}
Ok, все прекрасно и денди, я могу получить это, чтобы сделать точно такой же, как голый бизнес-объект и значение редирект при использовании следующей схемы:
public ActionResult Create(FormCollection form)
{
var model = new MyObjectViewModel();
if (TryUpdateModel(model, form) && ModelState.IsValid)
{
// ...
}
return View(model);
}
Я имеющий следующие вопросы:
- Каков самый чистый способ получить данные из модели просмотра и в бизнес-объект? (т. е. что заполняет остальную часть метода выше?)
- Могу ли я уменьшить дублирование имен полей между объектами, чтобы укрепить мои изменения?
- В приведенном выше примере поле
OtherUserName
являетсяstring
, которое необходимо преобразовать в объектUser
. Чья это ответственность? Контроллер? ViewModel? Модель связующего?
1) Во-первых, мои взгляды сильно типизированных. Кроме того, нет, если я это сделаю, данные не будут проходить в оба конца, и я не смогу обновить существующий объект базы данных таким образом. 3) Вы хотите, чтобы я сделал тип пользователя в ID объектов в базе данных? Я не думаю, что это будет хорошо. –
1) Тогда самым чистым способом является указание контроллеру ожидать типа «MyObject» вместо FormCollection. Если вы используете строго типизированное представление, привязка так же просто. 3) Нет, я обычно возвращаю дружественное имя через JSON/AJAX и привязываю его к выпадающему списку. Затем пользователь может выбрать это, но идентификатор передается контроллеру (вам нужна помощь javascript для этого - его необходимо в представлении, чтобы привязать выбранный ID к полю скрытой модели). –