public bool CollectTemplateData(long id) { PageCategory p = _unit.PageCategoryRepository.FindSingle(id); if (p == null) { throw new Exception("Not Found"); } Out.Write(p.ViewPath); GotoColumn(6); Out.Write(" View Data: "); TemplateDataCollector dto = GetCollector(p.Id); if (dto == null) { WriteFailed(); return(false); } WriteSuccess(); Out.Write(" Controls: "); _controls.UpdateTemplateControls(p, dto.Controls); _controls.DeleteUnusedControls(p, dto.Controls); _categories.UpdateParameters(p, dto.Parameters); if (!string.IsNullOrEmpty(_paths.LocalizationRoot)) { _loc.UpdateFiles(dto.Localization); } WriteSuccess(); return(true); }
public TemplateDataCollector GetCollector(HttpContext context, string viewName, string layout = null) { ActionContext actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor()); using (var sw = new StringWriter()) { var viewResult = _razorViewEngine.FindView(actionContext, viewName, false); if (viewResult.View == null) { throw new Exception($"{viewName} does not match any available view"); } var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()); viewDictionary["CollectViewData"] = true; viewDictionary["PageControls"] = new TemplateDataCollector { EntityName = null, Controls = new List <ControlDTO>() }; viewDictionary["LocalizationDataCollector"] = new LocalizationDataCollector(); if (layout != null) { viewDictionary["PageOptions"] = new PageOptions { Layout = layout }; } var viewContext = new ViewContext( actionContext, viewResult.View, viewDictionary, new TempDataDictionary(actionContext.HttpContext, _tempDataProvider), sw, new HtmlHelperOptions() ); var t = RenderAsync(viewResult, viewContext); t.Wait(); if (t.Result.Code != 200) { throw new CodeShellHttpException(t.Result); } var data = (TemplateDataCollector)viewContext.ViewData["PageControls"]; data.Localization = ((LocalizationDataCollector)viewContext.ViewData["LocalizationDataCollector"]); data.Localization.Unify(); return(data); } }