/// <summary> /// Конструктор на базе доменного объекта /// </summary> /// <param name="page">Доменный объект</param> public StaticPageJsonModel(StaticPage page) { Id = page.Id; Title = page.Title; Route = page.Route; Content = page.Content; Views = page.Views; DateCreated = page.DateCreated; DateModified = page.DateModified; }
public JsonResult Save([ModelBinder(typeof(JsonModelBinder))] StaticPageJsonModel model) { try { // Репозиторий var repository = Locator.GetService<IStaticPagesRepository>(); if (model.Id <= 0) { // Создаем новую страничку var page = new StaticPage() { DateCreated = DateTime.Now, Content = model.Content, Route = model.Route, Title = model.Title, Views = 0 }; repository.Add(page); // Сохраняем изменения repository.SubmitChanges(); // Добавляем запись в таблицу роутов var route = RouteTable.Routes.MapRoute("StaticPage" + page.Id, page.Route, new { controller = "Main", action = "StaticPage", id = page.Id }); RouteTable.Routes.Remove(route); RouteTable.Routes.Insert(0, route); } else { // Обновляем существующую var page = repository.Load(model.Id); if (page == null) { throw new ObjectNotFoundException(String.Format("Страница с идентификатором {0} не найдена", model.Id)); } // Если роут был изменен то нам требуется его исправить var routeChanged = model.Route != page.Route; var oldRoute = page.Route; page.Content = model.Content; page.Route = model.Route; page.Title = model.Title; page.DateModified = DateTime.Now; // Сохраняем изменения repository.SubmitChanges(); // Изменяем роут если надо if (routeChanged) { Route rowItem = (Route)RouteTable.Routes.Cast<Route>().FirstOrDefault(r => r.Url == oldRoute); if (rowItem != null) rowItem.Url = page.Route; } } return JsonSuccess(); } catch (Exception e) { return JsonErrors(e); } }