public virtual ActionResult Save(
[ModelBinder(typeof (ContentModelBinder)), Bind(Prefix = "NewPageModel")] IPage pageModel,
dynamic currentPage)
{
var parent = currentPage as Page;
if (!ModelState.IsValid)
{
NewPageViewModel viewModel;
using (IDocumentSession session = this.documentStore.OpenSession())
{
viewModel = new NewPageViewModel
{
RootModel = session.Advanced.GetStartPage(),
ParentModel = parent,
NewPageModel = pageModel,
SlugsInUse =
parent != null
? JsonConvert.SerializeObject(
session.Advanced.GetChildrenFor((IPage) currentPage)
.Select(x => x.Metadata.Slug))
: null
};
}
return View("new", viewModel);
}
using (IDocumentSession session = this.documentStore.OpenSession())
{
session.Store(pageModel, pageModel.Metadata.IsPublished ? StoreAction.Publish : StoreAction.Save);
if (parent != null)
{
pageModel.Parent = (Page) currentPage;
IPage[] children = session.Advanced.GetChildrenFor((IPage) currentPage).ToArray();
int max = children.Length > 0 ? children.Max(x => x.Metadata.SortOrder) : 0;
pageModel.Metadata.SortOrder = max + 1;
}
session.SaveChanges();
}
return RedirectToAction("index", new {currentPage = parent ?? pageModel});
}