public override async ValueTask <RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values) { var displayUrl = httpContext.Request.GetDisplayUrl(); var uri = ConvertStringToUri(displayUrl); if (uri != null) { CmsTreeNode?cmsTreeNode = await cmsTreeService.GetCmsTreeNode(CmsTreeType, uri.AbsolutePath, null).ConfigureAwait(false); if (cmsTreeNode != null && cmsTreeNode.CmsItemId.HasValue) { var cmsItem = await readCmsItemService.Read <CmsItem>(CmsTreeType, cmsTreeNode.CmsItemId.Value, null).ConfigureAwait(false); if (cmsItem != null) { return(new RouteValueDictionary() { { "controller", cmsTreeNode.CmsItemType }, { "action", "Index" }, { "area", null }, { "cmsItemId", cmsTreeNode.CmsItemId.Value }, }); } } } return(new RouteValueDictionary()); }
public async Task <IActionResult> EditTree([FromRoute] string cmsTreeType, [FromRoute] string slug, [FromQuery] string?treeItemSchemaKey, [FromQuery] string?lang) { slug ??= string.Empty; slug = slug.TrimStart('/'); slug = "/" + slug; var cmsMenuItem = schemaService.GetCmsType(cmsTreeType); if (cmsMenuItem == null || !cmsMenuItem.SchemaKeys.Any()) { return(new NotFoundResult()); } CmsTreeNode?cmsTreeItem = await cmsTreeService.GetCmsTreeNode(cmsTreeType, slug, lang).ConfigureAwait(false); if (cmsTreeItem == null) { cmsTreeItem = await cmsTreeService.CreateOrUpdateCmsTreeNodeForSlug(cmsTreeType, slug, new CmsTreeNode() { CmsItemId = Guid.NewGuid() }, lang, this.User.Identity?.Name); } if (string.IsNullOrEmpty(cmsTreeItem.CmsItemType) && string.IsNullOrEmpty(treeItemSchemaKey)) { EditTreeViewModel vm = new EditTreeViewModel { MenuCmsItem = cmsMenuItem, CmsType = cmsTreeType, Language = lang, TreeItemSchemaKey = treeItemSchemaKey, TreeNodeId = cmsTreeItem?.NodeId }; return(View(vm)); } Guid?id = cmsTreeItem.CmsItemId; if (!id.HasValue) { id = Guid.NewGuid(); } return(RedirectToAction("Edit", new { cmsType = cmsTreeType, id = id, lang = lang, treeItemSchemaKey = treeItemSchemaKey, treeNodeId = cmsTreeItem.NodeId })); }