Давайте теперь попробуем сгенерировать страницу для редактирования объекта нашей карты.
Если изучить ссылки на редактирование в списке объектов, то можно обнаружить, что они все уникальны и содержат в себе идентификатор объекта карты. Вот этот идентификатор и будет «ловить» экшен, отвечающий за редактирование. Давайте приступим. Для начала нам нужен метод нашего MapDataManager, который бы отдавал нам объект карты по его идентификатору (листинг 1).
Листинг 1 – Получение объекта по его идентификатору
public Map GetMapObjet(long mapObjId)
{
return _db.Map.SingleOrDefault(it => it.MapObj_id == mapObjId);
}
Тут, думаю, все понятно. Едем дальше – пишем экшен для получения формы для редактирования объекта (листинг 2).
Листинг 2 – Получение формы для редактирования объекта
[HttpGet]
public ActionResult MapObject_Edit(long id)
{
DataManager dm = new DataManager();
return View(dm.GetMapObjet(id));
}
Тут мы передаем в представление объект карты, полученный по идентификатору. Напомню, что этот идентификатор «пришел» в экшен из ссылки на странице со списком объектов. Теперь нам надо зафиксировать наши изменения в БД при отправке формы. Для этого сначала «научим» MapDataManager сохранять объект в БД (листинг 3).
Листинг 3 – Сохранение объекта в БД
public void SaveMapObject(Map mapObj)
{
Map old = GetMapObjet(mapObj.MapObj_id);
old.ObjName = mapObj.ObjName;
old.ObjAddress = mapObj.ObjAddress;
old.ObjType = mapObj.ObjType;
old.Description = mapObj.Description;
old.Contact = mapObj.Contact;
old.Longitude = mapObj.Longitude;
old.Latitude = mapObj.Latitude;
_db.SaveChanges();
}
Тут мы передаем в процедуру новый объект. Для фиксации его отредактированных свойств мы сначала ищем старый (нередактированный) объект – и по очереди обновляем все его свойства. Далее – сохраняем. Теперь напишем экшен пост-формы для этого дела (листинг 4).
Листинг 4 – Отправка формы с измененным объектом
[HttpPost]
public ActionResult MapObject_Edit(Map mapObj)
{
if (ModelState.IsValid)
{
DataManager dm = new DataManager();
dm.SaveMapObject(mapObj);
return RedirectToAction("Index");
}
else
{
return View();
}
}
Как говорится, без комментариев.
Если вы обратили внимание, мы наш экшен назвали MapObject_Edit, в то время как в представлении со списком объектов студия обозвала этот экшен просто Edit, поэтому переименуйте эту ссылку вручную – и пользуйтесь.
Таким нехитрым способом буквально за пару минут мы создали страницу для редактирования объекта карты.
3 комментария:
Продолжение будет? Особенно интересует как можно из списка объектов перейти к карте с отображением только данного объекта на карте (маркера).
Так же очень интересно узнать, как не терять позицию и масштаб карты если пользователь уходит на другую страницу сайта, а затем возвращается к карте.
Кризис жанра пока. Но по Вашим вопросам постараюсь что то написать :)
Частично ответил -
http://dedmazdie.blogspot.com/2011/07/mvc-3-crud-detail.html
Отправить комментарий