private static void AutoDiscoverTemplates() { ForEachType(type => { var attribute = type.GetCustomAttribute <MvcTemplateAttribute>(false); if (attribute == null) { return; } var template = new MvcPageTemplateDescriptor(type); GlobalConfiguration.Current.Templates.Add(template); }); }
protected override void OnActionExecuting(ActionExecutingContext filterContext) { var pageUrlData = PageUrls.ParseUrl(HttpContext.Request.Path); if (pageUrlData == null) { return; } C1PageRoute.PageUrlData = pageUrlData; _mvcContext = new MvcRenderingContext(ControllerContext); var page = PageRenderer.CurrentPage; ViewData.Add("C1PreviewContent", HttpContext.Items["C1PreviewContent"]); _template = PageTemplateFacade.GetPageTemplate(page.TemplateId) as MvcPageTemplateDescriptor; if (_template == null) { throw new InvalidOperationException(String.Format("The pagetemplate '{0}' is not a valid mvc template", page.TemplateId)); } var templateModel = Activator.CreateInstance(_template.TypeInfo.Item1); if (_template.PlaceholderDescriptions != null && _template.PlaceholderDescriptions.Any()) { foreach (var placeholder in _template.PlaceholderDescriptions) { var name = placeholder.Id; var prop = _template.TypeInfo.Item2[name]; var content = GetPlaceholderContent(name); BindPlaceholder(templateModel, prop, content); } } ViewData.Add("TemplateModel", templateModel); base.OnActionExecuting(filterContext); }
public static void UseCompositeC1ContribMvc(this IAppBuilder app, Action <IBootstrapperConfiguration> configurationAction) { Verify.ArgumentNotNull(app, "app"); Verify.ArgumentNotNull(configurationAction, "configurationAction"); var configuration = new BootstrapperConfiguration(); configurationAction(configuration); AutoDiscoverTemplates(); if (configuration.TemplateTypes != null) { foreach (var type in configuration.TemplateTypes) { var template = new MvcPageTemplateDescriptor(type); GlobalConfiguration.Current.Templates.Add(template); } } AutoDiscoverFunctions(); var routes = RouteTable.Routes; var c1PageRoute = routes["c1 page route"]; routes.Remove(c1PageRoute); if (configuration.RouteRegistrator != null) { configuration.RouteRegistrator(routes); } routes.Add("default mvc route", new DefaultCatchAllRoute()); routes.Add(c1PageRoute); }