/// <summary> /// Processes the specified args. /// </summary> /// <param name="args">The args.</param> public override void Process(GetModelArgs args) { if (args.Result != null) { return; } Rendering rendering = args.Rendering; if (rendering.RenderingType == "Layout") { args.Result = GetFromItem(rendering, args); if (args.Result == null) { args.Result = GetFromLayout(rendering, args); } } if (args.Result == null) { args.Result = GetFromPropertyValue(rendering, args); } if (args.Result == null) { args.Result = GetFromField(rendering, args); } if (args.Result != null) { args.AbortPipeline(); } }
public override void Process(GetModelArgs args) { if (args.Result != null) return; if (args.Rendering.RenderingType != "Layout" && args.Rendering.RenderingType != "View" && args.Rendering.RenderingType != "r" && args.Rendering.RenderingType != "d") return; var viewRenderer = args.Rendering.Renderer as ViewRenderer; if (viewRenderer == null) return; var compiledViewType = BuildManager.GetCompiledType(viewRenderer.ViewPath); var baseType = compiledViewType.BaseType; if (baseType == null || !baseType.IsGenericType) return; var modelType = baseType.GetGenericArguments()[0]; if (modelType == typeof(object)) return; args.Result = Activator.CreateInstance(modelType); }
public override void Process(GetModelArgs args) { if (args.Result == null) { try { Type type = GetFromField(args.Rendering, args); if (Context.StaticContext.Classes.ContainsKey(type)) { ISitecoreContext context = new SitecoreContext(); var result = context.GetCurrentItem(type); args.Result = result; } } catch (MapperException ex) { //do nothing } catch (System.TypeLoadException ex) { //do nothing } } }
private object CreateResult(IEnumerable <Rendering> renderings) { var args = new GetModelArgs(renderings); CorePipeline.Run("headless.getModel", args, false); return(args.Result); }
public override void Process(GetModelArgs args) { if (args.Result == null) { args.Result = GetFromViewPath(args.Rendering, args); } }
protected virtual Type GetModelVromViewPath(Rendering rendering, GetModelArgs args) { string path = rendering.Renderer is ViewRenderer ? ((ViewRenderer)rendering.Renderer).ViewPath : rendering.ToString().Replace("View: ", string.Empty); if (string.IsNullOrEmpty(path)) { return(null); } Type compiledType = BuildManager.GetCompiledType(path); Type baseType = compiledType.BaseType; // check if base type is null or generic if (baseType == null || !baseType.IsGenericType) { return(null); } Type modelType = baseType.GetGenericArguments()[0]; // check if no model has been set if (modelType == typeof(object)) { return(null); } return(modelType); }
protected virtual object GetFromViewPath(Rendering rendering, GetModelArgs args) { var viewPath = rendering.ToString().Replace("View: ", string.Empty); if(!SiteHelper.IsValidSite()) return null; var useSynthesisModelType = SynthesisRenderingCache.GetOrAdd(rendering.ToString(), key => { var renderer = rendering.Renderer; var diagnosticRenderer = renderer as RenderingDiagnosticsInjector.DiagnosticsRenderer; if (diagnosticRenderer != null) renderer = diagnosticRenderer.InnerRenderer; var viewRenderer = renderer as ViewRenderer; if (viewRenderer != null) viewPath = viewRenderer.ViewPath; var modelType = _typeResolver.GetViewModelType(viewPath); // Check to see if no model has been set if (modelType == typeof(object)) return false; // Check that the model is a Synthesis type (if not, we ignore it) if (!typeof(IStandardTemplateItem).IsAssignableFrom(modelType)) return false; return true; }); return useSynthesisModelType ? rendering.Item.AsStronglyTyped() : null; }
public override void Process(GetModelArgs args) { if (args.Result != null) { return; } Type modelType = this.GetModelVromViewPath(args.Rendering, args); if (modelType == null || !typeof(IGlassBase).IsAssignableFrom(modelType)) { return; } var sitecoreContext = this.SitecoreContext(); IGlassBase createdInstance = GetInstanceFromContext(args.Rendering, sitecoreContext); if (modelType.IsInstanceOfType(createdInstance)) { args.Result = createdInstance; } // else if model type is not type of created instance. args.AbortPipeline(); }
public override void Process(GetModelArgs args) { var currentViewContext = Sitecore.Mvc.Common.ContextService.Get().GetCurrent <System.Web.Mvc.ViewContext>(); if (currentViewContext.ViewData.Model == null) { return; } if (!(currentViewContext.Controller is StandardController)) { return; } var controller = currentViewContext.Controller as StandardController; if (controller.Model == null || !(controller.Model is IRenderingModel)) { return; } if (args.Result == null) { return; } if (args.Result.GetType().FullName == controller.Model.GetType().FullName) { args.Result = controller.Model; } }
public override void Process(GetModelArgs args) { if (args.Result == null) { try { Type type = GetFromField(args.Rendering, args); if (type == null) { return; } if (Context.StaticContext.Classes.ContainsKey(type)) { ISitecoreContext context = new SitecoreContext(); var result = context.GetCurrentItem(type); args.Result = result; } } catch (MapperException ex) { //do nothing } catch (System.TypeLoadException ex) { //do nothing } } }
/// <summary> /// Processes the specified args. /// </summary> /// <param name="args">The args.</param> public override void Process(GetModelArgs args) { Sitecore.Diagnostics.Log.Debug("Glass GetModel Process " + ContextName, this); if (args.Result == null) { Rendering rendering = args.Rendering; if (rendering.RenderingType == "Layout") { args.Result = GetFromItem(rendering, args); if (args.Result == null) { args.Result = GetFromLayout(rendering, args); } } if (args.Result == null) { args.Result = GetFromPropertyValue(rendering, args); } if (args.Result == null) { args.Result = GetFromField(rendering, args); } if (args.Result != null) { args.AbortPipeline(); } } }
protected virtual string GetViewPath(GetModelArgs args) { var rendering = args.Rendering; return(rendering.Renderer is ViewRenderer ? ((ViewRenderer)rendering.Renderer).ViewPath : rendering.ToString().Replace("View: ", string.Empty)); }
public override void Process(GetModelArgs args) { if (args.Result != null) return; Rendering = args.Rendering; args.Result = GetModelFromField(); }
protected virtual object GetFromItem(Rendering rendering, GetModelArgs args) { string model = ObjectExtensions.ValueOrDefault<Item, string>(rendering.Item, (Func<Item, string>)(i => i["MvcLayoutModel"])); if (StringExtensions.IsWhiteSpaceOrNull(model)) return (object) null; else return GetObject(model); }
protected virtual object GetFromPropertyValue(Rendering rendering, GetModelArgs args) { string model = rendering.Properties["Model"]; if (StringExtensions.IsWhiteSpaceOrNull(model)) return (object)null; else return GetObject(model); }
protected virtual Type GetFromField(Rendering rendering, GetModelArgs args) { Item obj = ObjectExtensions.ValueOrDefault<RenderingItem, Item>(rendering.RenderingItem, (Func<RenderingItem, Item>)(i => i.InnerItem)); if (obj == null) throw new MapperException("No rendering item"); else return Type.GetType(obj["Model"], true); }
protected virtual object GetFromField(Rendering rendering, GetModelArgs args) { Item obj = ObjectExtensions.ValueOrDefault<RenderingItem, Item>(rendering.RenderingItem, (Func<RenderingItem, Item>)(i => i.InnerItem)); if (obj == null) return (object)null; else return GetObject(obj["Model"]); }
public override void Process(GetModelArgs args) { if (this.IsValidView(args) == false) { return; } args.Result = this.GetFromViewPath(args.Rendering, args); }
protected virtual string GetViewPath(GetModelArgs args) { string path = args.Rendering.RenderingItem.InnerItem["path"]; if (string.IsNullOrWhiteSpace(path) && args.Rendering.RenderingType == "Layout") { path = GetPathFromLayout(args.PageContext.Database, new ID(args.Rendering.LayoutId)); } return(path); }
public override void Process(GetModelArgs args) { if (args.Result != null) { return; } Rendering = args.Rendering; args.Result = GetModelFromField(); }
public override void Process(GetModelArgs args) { var key = "GetModelFromView"; var watch = Stopwatch.StartNew(); try { if (!IsValidForProcessing(args)) { return; } string path = GetViewPath(args); if (string.IsNullOrWhiteSpace(path)) { return; } string cacheKey = modelCacheManager.GetKey(path); Type modelType = modelCacheManager.Get(cacheKey); if (modelType == typeof(NullModel)) { // The model has been attempted before and is not useful return; } // The model type hasn't been found before or has been cleared. if (modelType == null) { modelType = GetModel(args, path); if (typeof(RenderingModel).IsAssignableFrom(modelType)) { //convert RenderingModel to NullModel so it is ignored in the future. modelType = typeof(NullModel); } modelCacheManager.Add(cacheKey, modelType); if (modelType == typeof(NullModel)) { // This is not the type we are looking for return; } } args.Result = GetDataSourceItem(args, modelType); } finally { Sitecore.Diagnostics.Log.Debug("GetModelFromView {0} {1}".Formatted(watch.ElapsedMilliseconds, args.Rendering.RenderingItem.ID), this); } }
public override void Process(GetModelArgs args) { var currentViewContext = Sitecore.Mvc.Common.ContextService.Get().GetCurrent<System.Web.Mvc.ViewContext>(); if (currentViewContext.ViewData.Model == null) return; if (currentViewContext.ViewData.Model is IRenderingModel) { args.Result = currentViewContext.ViewData.Model; } }
/// <summary> /// Gets model from view path. /// </summary> /// <param name="rendering">The rendering.</param> /// <param name="args">The arguments.</param> /// <returns></returns> protected virtual object GetFromViewPath(Rendering rendering, GetModelArgs args) { try { var path = rendering.Renderer is ViewRenderer renderer ? renderer.ViewPath : rendering.ToString().Replace("View: ", string.Empty); if (string.IsNullOrWhiteSpace(path)) { return(null); } // Retrieve the compiled view var compiledViewType = BuildManager.GetCompiledType(path); var baseType = compiledViewType.BaseType; // Check to see if the view has been found and that it is a generic type if (baseType == null || !baseType.IsGenericType) { return(null); } var modelType = baseType.GetGenericArguments()[0]; var viewModelFactory = ViewModelFactory.Instance; // Check to see if no model has been set if (modelType.IsAssignableTo(typeof(IViewModel))) { return(viewModelFactory.GetViewModel()); } if (modelType.IsAssignableTo(typeof(IViewModel <ItemWrapper>)) || modelType.IsAssignableTo(typeof(IViewModel <ItemWrapper, RenderingParametersWrapper>))) { var modelGenericArgs = modelType.GetGenericArguments(); var method = typeof(ViewModelFactory).GetMethods().FirstOrDefault(m => string.Equals(m.Name, "GetViewModel") && m.GetGenericArguments().Length.Equals(modelGenericArgs.Length)); var genericMethod = method?.MakeGenericMethod(modelGenericArgs); return(genericMethod?.Invoke(viewModelFactory, null)); } return(null); } catch { return(null); } }
/// <summary> /// Gets from item. /// </summary> /// <param name="rendering">The rendering.</param> /// <param name="args">The args.</param> /// <returns></returns> protected virtual object GetFromItem(Rendering rendering, GetModelArgs args) { string model = rendering.Item.ValueOrDefault(i => i["MvcLayoutModel"]); if (model.IsWhiteSpaceOrNull()) { return(null); } return(GetObject(model, rendering.Item.Database, rendering)); }
protected virtual object GetFromLayout(Rendering rendering, GetModelArgs args) { string pathOrId = rendering.Properties["LayoutId"]; if (StringExtensions.IsWhiteSpaceOrNull(pathOrId)) return (object)null; string model = ObjectExtensions.ValueOrDefault<Item, string>(MvcSettings.GetRegisteredObject<ItemLocator>().GetItem(pathOrId), (Func<Item, string>)(i => i["Model"])); if (StringExtensions.IsWhiteSpaceOrNull(model)) return (object) null; else return GetObject(model); }
/// <summary> /// Gets from field. /// </summary> /// <param name="rendering">The rendering.</param> /// <param name="args">The args.</param> /// <returns></returns> protected virtual object GetFromField(Rendering rendering, GetModelArgs args) { Item obj = rendering.RenderingItem.ValueOrDefault(i => i.InnerItem); if (obj == null) { return(null); } return(rendering.Item == null ? null : GetObject(obj[ModelField], rendering.Item.Database, rendering)); }
protected virtual Type GetFromField(Rendering rendering, GetModelArgs args) { Item obj = ObjectExtensions.ValueOrDefault <RenderingItem, Item>(rendering.RenderingItem, (Func <RenderingItem, Item>)(i => i.InnerItem)); if (obj == null) { throw new MapperException("No rendering item"); } else { return(Type.GetType(obj["Model"], true)); } }
public override void Process(GetModelArgs args) { //See if someone else chose a model if (args.Result == null) { args.Result = ModelFactory.Model <BaseEntity>(args.Rendering.Item, false); if (args.Result != null) { Tracer.Info(string.Format("Bound model {0} to item {1}", args.Result.GetType().FullName, args.Rendering.Item.ID)); } } }
protected virtual object GetFromField(Rendering rendering, GetModelArgs args) { Item obj = ObjectExtensions.ValueOrDefault <RenderingItem, Item>(rendering.RenderingItem, (Func <RenderingItem, Item>)(i => i.InnerItem)); if (obj == null) { return((object)null); } else { return(GetObject(obj["Model"])); } }
protected virtual object GetFromPropertyValue(Rendering rendering, GetModelArgs args) { string model = rendering.Properties["Model"]; if (StringExtensions.IsWhiteSpaceOrNull(model)) { return((object)null); } else { return(GetObject(model)); } }
/// <summary> /// Gets from property value. /// </summary> /// <param name="rendering">The rendering.</param> /// <param name="args">The args.</param> /// <returns></returns> protected virtual object GetFromPropertyValue(Rendering rendering, GetModelArgs args) { string model = rendering.Properties[ModelField]; if (model.IsWhiteSpaceOrNull()) { return(null); } else { return(GetObject(model, rendering.Item.Database, rendering)); } }
public override void Process(GetModelArgs args) { //See if someone else chose a model if (args.Result == null) { args.Result = ModelFactory.Model<BaseEntity>(args.Rendering.Item, false); if (args.Result != null) { Tracer.Info(string.Format("Bound model {0} to item {1}", args.Result.GetType().FullName, args.Rendering.Item.ID)); } } }
protected virtual object GetFromItem(Rendering rendering, GetModelArgs args) { string model = ObjectExtensions.ValueOrDefault <Item, string>(rendering.Item, (Func <Item, string>)(i => i["MvcLayoutModel"])); if (StringExtensions.IsWhiteSpaceOrNull(model)) { return((object)null); } else { return(GetObject(model)); } }
public override void Process(GetModelArgs args) { var currentViewContext = Sitecore.Mvc.Common.ContextService.Get().GetCurrent <System.Web.Mvc.ViewContext>(); if (currentViewContext.ViewData.Model == null) { return; } if (currentViewContext.ViewData.Model is IRenderingModel) { args.Result = currentViewContext.ViewData.Model; } }
/// <summary> /// Processes the specified arguments. /// </summary> /// <param name="args">The arguments.</param> public override void Process(GetModelArgs args) { if (args.Rendering.Item == null || args.Result == null || args.Result is RenderingModel) { return; } HighResTimer timer = new HighResTimer(true); args.Rendering.Item.Project(args.Result); var elapsed = timer.ElapsedTimeSpan.Milliseconds; Log.Info("elapsed:" + elapsed, this); timer.Stop(); }
protected virtual bool IsValidForProcessing(GetModelArgs args) { if (args.Result != null) { return(false); } if (!String.IsNullOrEmpty(args.Rendering.RenderingItem.InnerItem["Model"])) { return(false); } return(args.Rendering.RenderingType == "Layout" || args.Rendering.RenderingType == "View" || args.Rendering.RenderingType == "r" || args.Rendering.RenderingType == String.Empty); }
protected virtual object GetFromViewPath(Rendering rendering, GetModelArgs args) { var path = this.GetViewPath(args); if (string.IsNullOrWhiteSpace(path)) { return(null); } var filePath = HttpContext.Current.Server.MapPath(path); if (File.Exists(filePath) == false) { return(false); } // Retrieve the compiled view var compiledViewType = BuildManager.GetCompiledType(path); var baseType = compiledViewType.BaseType; // Check to see if the view has been found and that it is a generic type if (baseType == null || !baseType.IsGenericType) { return(null); } var modelType = baseType.GetGenericArguments()[0]; // Check to see if no model has been set if (modelType == typeof(object)) { return(null); } var modelGenericArgs = modelType.GetGenericArguments(); var itemFactory = DependencyResolver.Current.GetService <IItemFactory>(); var method = itemFactory.GetType().GetMethods().FirstOrDefault(m => string.Equals(m.Name, "GetRenderingContextItems") && m.GetGenericArguments().Count().Equals(modelGenericArgs.Count())); var genericMethod = method?.MakeGenericMethod(modelGenericArgs); return(genericMethod?.Invoke(itemFactory, new object[] { itemFactory })); }
protected virtual object GetFromViewPath(Rendering rendering, GetModelArgs args) { var viewPath = rendering.ToString().Replace("View: ", string.Empty); if (!SiteHelper.IsValidSite()) { return(null); } var useSynthesisModelType = SynthesisRenderingCache.GetOrAdd(rendering.ToString(), key => { var renderer = rendering.Renderer; var diagnosticRenderer = renderer as RenderingDiagnosticsInjector.DiagnosticsRenderer; if (diagnosticRenderer != null) { renderer = diagnosticRenderer.InnerRenderer; } var viewRenderer = renderer as ViewRenderer; if (viewRenderer != null) { viewPath = viewRenderer.ViewPath; } var modelType = _typeResolver.GetViewModelType(viewPath); // Check to see if no model has been set if (modelType == typeof(object)) { return(false); } // Check that the model is a Synthesis type (if not, we ignore it) if (!typeof(IStandardTemplateItem).IsAssignableFrom(modelType)) { return(false); } return(true); }); return(useSynthesisModelType ? rendering.Item.AsStronglyTyped() : null); }
/// <summary> /// Gets from layout. /// </summary> /// <param name="rendering">The rendering.</param> /// <param name="args">The args.</param> /// <returns></returns> protected virtual object GetFromLayout(Rendering rendering, GetModelArgs args) { string pathOrId = rendering.Properties["LayoutId"]; if (pathOrId.IsWhiteSpaceOrNull()) { return(null); } string model = MvcSettings.GetRegisteredObject <ItemLocator>().GetItem(pathOrId).ValueOrDefault(i => i["Model"]); if (model.IsWhiteSpaceOrNull()) { return(null); } else { return(GetObject(model, rendering.Item.Database, rendering)); } }
protected virtual object GetFromLayout(Rendering rendering, GetModelArgs args) { string pathOrId = rendering.Properties["LayoutId"]; if (StringExtensions.IsWhiteSpaceOrNull(pathOrId)) { return((object)null); } string model = ObjectExtensions.ValueOrDefault <Item, string>(MvcSettings.GetRegisteredObject <ItemLocator>().GetItem(pathOrId), (Func <Item, string>)(i => i["Model"])); if (StringExtensions.IsWhiteSpaceOrNull(model)) { return((object)null); } else { return(GetObject(model)); } }
protected virtual object GetFromViewPath(Rendering rendering, GetModelArgs args) { var path = rendering.Renderer is ViewRenderer ? ((ViewRenderer)rendering.Renderer).ViewPath : rendering.ToString().Replace("View: ", string.Empty); if (string.IsNullOrWhiteSpace(path)) { return null; } // Retrieve the compiled view var compiledViewType = BuildManager.GetCompiledType(path); var baseType = compiledViewType.BaseType; // Check to see if the view has been found and that it is a generic type if (baseType == null || !baseType.IsGenericType) { return null; } var modelType = baseType.GetGenericArguments()[0]; // Check to see if no model has been set if (modelType == typeof(object)) { return null; } var modelGenericArgs = modelType.GetGenericArguments(); var itemFactory = DependencyResolver.Current.GetService<IItemFactory>(); var method = itemFactory.GetType().GetMethods().FirstOrDefault(m => string.Equals(m.Name, "GetRenderingContextItems") && m.GetGenericArguments().Count().Equals(modelGenericArgs.Count())); if (method != null) { var genericMethod = method.MakeGenericMethod(modelGenericArgs); return genericMethod.Invoke(itemFactory, new object[] { itemFactory }); } return null; }
public override void Process(GetModelArgs args) { var currentViewContext = Sitecore.Mvc.Common.ContextService.Get().GetCurrent<System.Web.Mvc.ViewContext>(); if (currentViewContext.ViewData.Model == null) return; if (!(currentViewContext.Controller is StandardController)) return; var controller = currentViewContext.Controller as StandardController; if (controller.Model == null || !(controller.Model is IRenderingModel)) return; if (args.Result == null) return; if (args.Result.GetType().FullName == controller.Model.GetType().FullName) { args.Result = controller.Model; } }
public override void Process(GetModelArgs args) { if (!IsValidForProcessing(args)) { return; } string path = GetViewPath(args); if (string.IsNullOrWhiteSpace(path)) { return; } string cacheKey = modelCacheManager.GetKey(path); Type modelType = modelCacheManager.Get(cacheKey); if (modelType == typeof(NullModel)) { // The model has been attempted before and is not useful return; } // The model type hasn't been found before or has been cleared. if (modelType == null) { modelType = GetModel(args, path); modelCacheManager.Add(cacheKey, modelType); if (modelType == typeof(NullModel)) { // This is not the type we are looking for return; } } ISitecoreContext scContext = SitecoreContext.GetFromHttpContext(ContextName); Rendering renderingItem = args.Rendering; object model = null; if (renderingItem.DataSource.HasValue()) { var item = scContext.Database.GetItem(renderingItem.DataSource); model = scContext.CreateType(modelType, item, false, false, null); } else if (renderingItem.RenderingItem.DataSource.HasValue()) { var item = scContext.Database.GetItem(renderingItem.RenderingItem.DataSource); model = scContext.CreateType(modelType, item, false, false, null); } else if (renderingItem.Item != null) { /** * Issues #82: * Check Item before defaulting to the current item. */ model = scContext.CreateType(modelType, renderingItem.Item, false, false, null); } else { model = scContext.GetCurrentItem(modelType); } args.Result = model; }
private static bool IsValidForProcessing(GetModelArgs args) { if (args.Result != null) { return false; } if (!String.IsNullOrEmpty(args.Rendering.RenderingItem.InnerItem["Model"])) { return false; } return args.Rendering.RenderingType == "Layout" || args.Rendering.RenderingType == "View" || args.Rendering.RenderingType == "r" || args.Rendering.RenderingType == String.Empty; }
private Type GetModel(GetModelArgs args, string path) { Type compiledViewType = BuildManager.GetCompiledType(path); Type baseType = compiledViewType.BaseType; if (baseType == null || !baseType.IsGenericType) { Log.Error(string.Format( "View {0} compiled type {1} base type {2} does not have a single generic argument.", args.Rendering.RenderingItem.InnerItem["path"], compiledViewType, baseType), this); return typeof(NullModel); } Type proposedType = baseType.GetGenericArguments()[0]; return proposedType == typeof(object) ? typeof(NullModel) : proposedType; }
private string GetViewPath(GetModelArgs args) { string path = args.Rendering.RenderingItem.InnerItem["path"]; if (string.IsNullOrWhiteSpace(path) && args.Rendering.RenderingType == "Layout") { path = GetPathFromLayout(args.PageContext.Database, new ID(args.Rendering.LayoutId)); } return path; }
protected virtual bool IsValidForProcessing(GetModelArgs args) { if (args.Result != null) { return false; } if (Sitecore.Context.Site != null && Sitecore.Context.Site.Name.ToLowerInvariant() == "shell") { return false; } if (!String.IsNullOrEmpty(args.Rendering.RenderingItem.InnerItem["Model"])) { return false; } return args.Rendering.RenderingType == "Layout" || args.Rendering.RenderingType == "View" || args.Rendering.RenderingType == "r" || args.Rendering.RenderingType == String.Empty; }
protected virtual Type GetModel(GetModelArgs args, string path) { return ViewTypeResolver.GetType(path); }
/// <summary> /// Gets from field. /// </summary> /// <param name="rendering">The rendering.</param> /// <param name="args">The args.</param> /// <returns></returns> protected virtual object GetFromField(Rendering rendering, GetModelArgs args) { Item obj = ObjectExtensions.ValueOrDefault<RenderingItem, Item>(rendering.RenderingItem, (Func<RenderingItem, Item>)(i => i.InnerItem)); if (obj == null) return (object)null; else if (rendering.Item == null) { return null; } else { return GetObject(obj[ModelField], rendering.Item.Database, rendering); } }
/// <summary> /// Gets from item. /// </summary> /// <param name="rendering">The rendering.</param> /// <param name="args">The args.</param> /// <returns></returns> protected virtual object GetFromItem(Rendering rendering, GetModelArgs args) { string model = rendering.Item.ValueOrDefault(i => i["MvcLayoutModel"]); if (model.IsWhiteSpaceOrNull()) return null; return GetObject(model, rendering.Item.Database, rendering); }
/// <summary> /// Gets from layout. /// </summary> /// <param name="rendering">The rendering.</param> /// <param name="args">The args.</param> /// <returns></returns> protected virtual object GetFromLayout(Rendering rendering, GetModelArgs args) { string pathOrId = rendering.Properties["LayoutId"]; if (pathOrId.IsWhiteSpaceOrNull()) return null; string model = MvcSettings.GetRegisteredObject<ItemLocator>().GetItem(pathOrId).ValueOrDefault(i => i["Model"]); if (model.IsWhiteSpaceOrNull()) return null; else return GetObject(model, rendering.Item.Database, rendering); }
/// <summary> /// Gets from property value. /// </summary> /// <param name="rendering">The rendering.</param> /// <param name="args">The args.</param> /// <returns></returns> protected virtual object GetFromPropertyValue(Rendering rendering, GetModelArgs args) { string model = rendering.Properties[ModelField]; if (model.IsWhiteSpaceOrNull()) return null; else return GetObject(model, rendering.Item.Database, rendering); }
/// <summary> /// Gets from field. /// </summary> /// <param name="rendering">The rendering.</param> /// <param name="args">The args.</param> /// <returns></returns> protected virtual object GetFromField(Rendering rendering, GetModelArgs args) { Item obj = rendering.RenderingItem.ValueOrDefault(i => i.InnerItem); if (obj == null) return null; return rendering.Item == null ? null : GetObject(obj[ModelField], rendering.Item.Database, rendering); }
public override void Process(GetModelArgs args) { var key = "GetModelFromView"; var watch = Stopwatch.StartNew(); try { if (!IsValidForProcessing(args)) { return; } string path = GetViewPath(args); if (string.IsNullOrWhiteSpace(path)) { return; } string cacheKey = modelCacheManager.GetKey(path); Type modelType = modelCacheManager.Get(cacheKey); if (modelType == typeof(NullModel)) { // The model has been attempted before and is not useful return; } // The model type hasn't been found before or has been cleared. if (modelType == null) { modelType = GetModel(args, path); modelCacheManager.Add(cacheKey, modelType); if (modelType == typeof(NullModel)) { // This is not the type we are looking for return; } } ISitecoreContext scContext = SitecoreContextFactory.GetSitecoreContext(); Rendering renderingItem = args.Rendering; object model = null; if (renderingItem.DataSource.HasValue()) { var item = scContext.Database.GetItem(renderingItem.DataSource); model = scContext.CreateType(modelType, item, false, false, null); } else if (renderingItem.RenderingItem.DataSource.HasValue()) { var item = scContext.Database.GetItem(renderingItem.RenderingItem.DataSource); model = scContext.CreateType(modelType, item, false, false, null); } else if (renderingItem.Item != null) { /** * Issues #82: * Check Item before defaulting to the current item. */ model = scContext.CreateType(modelType, renderingItem.Item, false, false, null); } else { model = scContext.GetCurrentItem(modelType); } args.Result = model; } finally { Sitecore.Diagnostics.Log.Info("GetModelFromView {0} {1}".Formatted(watch.ElapsedMilliseconds, args.Rendering.RenderingItem.ID), this); } }