public IActionResult MenuItemEditor(int menuId, int menuItemId) { var menu = _menuService.Get(menuId); if (menu == null) { return(NotFound()); } var menuItem = menuItemId > 0 ? menu.MenuItems.FirstOrDefault(x => x.Id == menuItemId) : new MenuItem(); if (menuItem == null) { return(NotFound()); } var model = _modelMapper.Map <MenuItemModel>(menuItem); if (menuItem.SeoMeta != null) { model.Url = SeoMetaHelper.GetUrl(menuItem.SeoMeta); var entityId = menuItem.SeoMeta.EntityId; switch (menuItem.SeoMeta.EntityName) { case nameof(Product): model.SeoMetaTargetName = _productService.FirstOrDefault(y => y.Id == entityId)?.Name ?? "NA"; break; case nameof(Category): model.SeoMetaTargetName = _categoryService.FirstOrDefault(y => y.Id == entityId)?.Name ?? "NA"; break; case nameof(ContentPage): model.SeoMetaTargetName = _contentPageService.FirstOrDefault(y => y.Id == entityId)?.Name ?? "NA"; break; } } IList <SelectListItem> availableMenuItems = null; //send available parent menu items to which this menu item can be moved to if (menu.MenuItems != null) { menu.MenuItems = menu.MenuItems.GetWithParentTree(); availableMenuItems = SelectListHelper.GetSelectItemListWithAction( menu.MenuItems.Where(x => x.ParentId != menuItemId).ToList(), x => x.Id, item => item.GetFieldBreadCrumb(y => y.Name)).OrderBy(x => x.Text).ToList(); } return(R.Success.With("menuItem", model).With("availableMenuItems", availableMenuItems).Result); }