public ActionResult RenderDashboard(DashboardItemModel model) { switch (model.DashboardType) { case DashboardType.PartialView: return PartialView(model.ViewName); case DashboardType.ChildAction: MethodInfo childAction; var editorController = model.GetEditorDashboardAction(BackOfficeRequestContext.RegisteredComponents, out childAction); if (!TypeFinder.IsTypeAssignableFrom<PartialViewResult>(childAction.ReturnType) && !TypeFinder.IsTypeAssignableFrom<ContentResult>(childAction.ReturnType)) { throw new InvalidOperationException("ChildAction dashboards should have a return type of " + typeof(PartialViewResult).Name + " or " + typeof(ContentResult).Name); } //proxy the request to the controller var result = this.ProxyRequestToController( ControllerExtensions.GetControllerName(editorController.Metadata.ComponentType), childAction.Name, editorController.Metadata, BackOfficeRequestContext.Application.Settings.UmbracoPaths.BackOfficePath, "editorId", new Dictionary<string, object>()); return Content(result.RenderedOutput); default: throw new ArgumentOutOfRangeException(); } }
public ActionResult RenderDashboard(DashboardItemModel model) { switch (model.DashboardType) { case DashboardType.PartialView: return PartialView(model.ViewName); case DashboardType.ChildAction: MethodInfo childAction; var editorController = model.GetEditorDashboardAction(BackOfficeRequestContext.RegisteredComponents, out childAction); if (!TypeFinder.IsTypeAssignableFrom<PartialViewResult>(childAction.ReturnType)) { throw new InvalidOperationException("ChildAction dashboards should have a return type of " + typeof(PartialViewResult).Name); } using (var controller = editorController.Value) { if (controller == null) throw new TypeLoadException("Could not create controller: " + UmbracoController.GetControllerName(editorController.Metadata.ComponentType)); //proxy the request to the controller return this.ProxyRequestToController(controller, childAction); } default: throw new ArgumentOutOfRangeException(); } }