private static object ExecuteDataMethod(Render.FrontContext context, Guid MethodId) { var CompiledMethod = CompileMethodCache.GetCompiledMethod(context.SiteDb, MethodId); if (CompiledMethod == null) { return(null); } var ParameterBindings = CompiledMethod.ParameterBindings; List <object> paras = ParameterBinder.Bind(CompiledMethod.Parameters, ParameterBindings, context.RenderContext.DataContext); CheckAndAssignDefaultValue(paras, CompiledMethod, context, MethodId); return(Execute(CompiledMethod, paras.ToArray(), context)); }
public static object ExecuteViewDataMethod(Render.FrontContext context, ViewDataMethod ViewMethod, DataContext parentDataContext = null) { var CompiledMethod = CompileMethodCache.GetCompiledMethod(context.SiteDb, ViewMethod.MethodId); if (CompiledMethod == null) { return(null); } var ParameterBindings = CompiledMethod.ParameterBindings; DataContext dataContext = parentDataContext == null ? context.RenderContext.DataContext : parentDataContext; if (CompiledMethod.IsKScript) { var dictparas = ParameterBinder.BindKScript(CompiledMethod.Parameters, ParameterBindings, dataContext); return(Kooboo.Sites.Scripting.Manager.ExecuteDataSource(context.RenderContext, CompiledMethod.CodeId, dictparas)); } List <object> paras = ParameterBinder.Bind(CompiledMethod.Parameters, ParameterBindings, dataContext); CheckAndAssignDefaultValue(paras, CompiledMethod, context, ViewMethod.MethodId); var result = Execute(CompiledMethod, paras.ToArray(), context); if (result == null) { return(null); } if (ViewMethod.HasChildren) { var type = result.GetType(); if (Kooboo.Lib.Reflection.TypeHelper.IsGenericCollection(type)) { List <DataMethodResult> results = new List <DataMethodResult>(); var itemcollection = ((IEnumerable)result).Cast <object>().ToList(); foreach (var item in itemcollection) { var itemresult = ExecuteSubViewDataMethod(context, item, ViewMethod.Children); results.Add(itemresult); } return(results); } else if (result is PagedResult) { var pagedresult = result as PagedResult; List <DataMethodResult> results = new List <DataMethodResult>(); var itemcollection = ((IEnumerable)pagedresult.DataList).Cast <object>().ToList(); foreach (var item in itemcollection) { var itemresult = ExecuteSubViewDataMethod(context, item, ViewMethod.Children); results.Add(itemresult); } pagedresult.DataList = results.ToList <object>(); return(pagedresult); } else { return(ExecuteSubViewDataMethod(context, result, ViewMethod.Children)); } } else { return(result); } }