public async Task <IActionResult> Index(string contentitemid = "/", string type = "root") { //if (!Services.Authorizer.Authorize(StandardPermissions.AccessAdminPanel, // T("Not allowed to access admin panel"))) // return new HttpUnauthorizedResult(); var node = await GetTreeNode(contentitemid, type) ?? new BreadCrumbNode { Id = "/", Type = "root", Title = "Root" }; //https://stackoverflow.com/questions/18602923/selectmany-cannot-infer-type-argument-why-not //var level0 = _breadcrumbNodeProviders.Select( p => p.GetChildren(type, contentitemid).Result.Select(x=>x)) ; //var children = level0.SelectMany(x => x); var children = await _breadCrumbNodeProvider.GetChildren(type, contentitemid); // var children = _treeNodeProviders.Select(x=> x).SelectMany(p => p.GetChildren(type, id).Result); // var children = await _treeNodeProviders.SelectMany(p => p.GetChildren(type, id)); var model = new AdvancedBreadCrumbPartViewModel { Node = node, Children = children }; if (Request.IsAjaxRequest()) { return(new JsonResult(new { Data = model })); } return(View(model)); }
// public override IDisplayResult Edit(AdvancedBreadCrumbPart part) // { // return Initialize<AdvancedBreadCrumbPartViewModel>("AdvancedBreadCrumbPart_Edit", m => BuildViewModel(m, part)) // .Location("Detail", "Content:10") // .Location("SummaryAdmin", "Content:5") // .Location("DetailAdmin", "Content:before"); // } // // public override async Task<IDisplayResult> UpdateAsync(AdvancedBreadCrumbPart model, IUpdateModel updater) // { // // var settings = GetDisqusPartSettings(model); // // await updater.TryUpdateModelAsync(model, Prefix, t => t);// t => t.ShowComments); // // return Edit(model); // } //http://www.hexacta.com/2016/06/01/task-run-vs-async-await/ //private Task BuildViewModel(AdvancedBreadCrumbPartViewModel model, AdvancedBreadCrumbPart part) private Task BuildViewModel(AdvancedBreadCrumbPartViewModel model, AdvancedBreadCrumbPart part) { model.ContentItem = part.ContentItem; model.AdvancedBreadCrumbPart = part; GetRootNode(part.ContentItem.ContentItemId, model); //await Task.Run(() => //{ // model.ContentItem = part.ContentItem; // model.AdvancedBreadCrumbPart = part; // GetRootNode(part.ContentItem.ContentItemId, model); //}); // var settings = GetDisqusPartSettings(part); // var vm = new AdvancedBreadCrumbPartViewModel(); //model.ShortName = settings.ShortName; //model.ShowComments = part.ShowComments; // model.Settings = settings; // var task= GetRootNode(part.ContentItem.ContentItemId, model); // task.RunSynchronously(); // return vm; return(Task.CompletedTask); }
//http://www.hexacta.com/2016/06/01/task-run-vs-async-await/ private async void GetRootNode(string id, AdvancedBreadCrumbPartViewModel model, string type = "root") { //if (!Services.Authorizer.Authorize(StandardPermissions.AccessAdminPanel, // T("Not allowed to access admin panel"))) // return new HttpUnauthorizedResult(); //https://stackoverflow.com/questions/35011656/async-await-in-linq-select var node = await GetBreadCrumbNode(id, type); //var node = await task; if (node == null) { node = new BreadCrumbNode { Id = "/", Type = "root", Title = T["Root"].Value }; // var node =await GetBreadCrumbNode(id, type) ?? new BreadCrumbNode { Id = "/", Type = "root", Title = T["Root"].Value }; //https://stackoverflow.com/questions/18602923/selectmany-cannot-infer-type-argument-why-not var children = await _breadCrumbNodeProvider.GetChildren(type, id); // var levell0 = children0.Select(x => x); //var levell0 = _breadcrumbNodeProviders.OfType<AdvancedBreadCrumbNodeProvider>() // .Select(p => p.GetChildren(type, id).Result.Select(x => x)); // var children = levell0.SelectMany(x => x); model.Node = node; model.Children = children; //var model = new TreeExplorerViewModel //{ // Node = node, // Children = children //}; //if (Request.IsAjaxRequest()) //{ // return new JsonResult { Data = model }; //} // return model; } // return Task.CompletedTask; }