internal static string GenerateBasePageHtml(string gridName, IMVCGridDefinition def, object pageParameters)
        {
            string definitionJson = GenerateClientDefinitionJson(gridName, def, pageParameters);

            StringBuilder sbHtml = new StringBuilder();

            sbHtml.AppendFormat("<div id='{0}' class='{1}'>", HtmlUtility.GetContainerHtmlId(gridName), HtmlUtility.ContainerCssClass);

            sbHtml.AppendFormat("<input type='hidden' name='MVCGridName' value='{0}' />", gridName);
            sbHtml.AppendFormat("<div id='MVCGrid_{0}_JsonData' style='display: none'>{1}</div>", gridName, definitionJson);

            sbHtml.AppendFormat("<div id='MVCGrid_ErrorMessage_{0}' style='display: none;'>", gridName);
            if (String.IsNullOrWhiteSpace(def.ErrorMessageHtml))
            {
                sbHtml.Append("An error has occured.");
            }
            else
            {
                sbHtml.Append(def.ErrorMessageHtml);
            }
            sbHtml.Append("</div>");

            sbHtml.AppendFormat("<div id='{0}'>", HtmlUtility.GetTableHolderHtmlId(gridName));
            sbHtml.Append("%%PRELOAD%%");
            sbHtml.Append("</div>");

            sbHtml.AppendLine("</div>");

            return(sbHtml.ToString());
        }
Example #2
0
        internal static string GenerateGrid(string gridName, out int statusCode, NameValueCollection nameValueCollection = null)
        {
            if (nameValueCollection == null)
            {
                nameValueCollection = new NameValueCollection();
            }

            statusCode = 200;
            IMVCGridDefinition grid        = MVCGridDefinitionTable.GetDefinitionInterface(gridName);
            QueryOptions       options     = QueryStringParser.ParseOptions(grid, nameValueCollection);
            GridContext        gridContext = MVCGrid.NetCore.Utility.GridContextUtility.Create(/*context, */ gridName, grid, options);

            GridEngine engine = new GridEngine();

            if (!engine.CheckAuthorization(gridContext))
            {
                //Forbidden
                statusCode = 403;
                return(string.Empty);
            }

            IMVCGridRenderingEngine renderingEngine = GridEngine.GetRenderingEngine(gridContext);

            // TODO: Reimplement this for csv exports and other rendering responses.
            //renderingEngine.PrepareResponse(context.Response);

            StringBuilder sb         = new StringBuilder();
            TextWriter    htmlWriter = new StringWriter(sb);

            engine.Run(renderingEngine, gridContext, htmlWriter);
            string html = sb.ToString();

            return(html);
        }
Example #3
0
        private static string RenderContainerHtml(HtmlHelper helper, IMVCGridDefinition grid, string gridName, ContainerRenderingModel containerRenderingModel)
        {
            string container = containerRenderingModel.InnerHtmlBlock;

            switch (grid.RenderingMode)
            {
            case Models.RenderingMode.RenderingEngine:
                var renderingEngine = GetRenderingEngineInternal(grid);
                container = RenderContainerUsingRenderingEngine(grid, containerRenderingModel);
                break;

            case Models.RenderingMode.Controller:
                if (!String.IsNullOrWhiteSpace(grid.ContainerViewPath))
                {
                    container = RenderContainerUsingController(grid, helper, containerRenderingModel);
                }
                break;

            default:
                throw new InvalidOperationException();
            }

            if (!container.Contains(containerRenderingModel.InnerHtmlBlock))
            {
                throw new Exception("When rendering a container, you must output Model.InnerHtmlBlock inside the container (Raw).");
            }

            return(container);
        }
        private static string GenerateClientDefinitionJson(string gridName, IMVCGridDefinition def, object pageParameters)
        {
            StringBuilder sbJson = new StringBuilder();

            sbJson.Append("{");
            sbJson.AppendFormat("\"name\": \"{0}\"", gridName);
            sbJson.Append(",");
            sbJson.AppendFormat("\"qsPrefix\": \"{0}\"", def.QueryStringPrefix);
            sbJson.Append(",");

            bool preloadedAlready = def.PreloadData;

            if (!def.QueryOnPageLoad)
            {
                preloadedAlready = true;
            }
            sbJson.AppendFormat("\"preloaded\": {0}", preloadedAlready.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"clientLoading\": \"{0}\"", def.ClientSideLoadingMessageFunctionName);

            sbJson.Append(",");
            sbJson.AppendFormat("\"clientLoadingComplete\": \"{0}\"", def.ClientSideLoadingCompleteFunctionName);

            sbJson.Append(",");
            sbJson.AppendFormat("\"renderingMode\": \"{0}\"", def.RenderingMode.ToString().ToLower());

            sbJson.Append(",");
            sbJson.Append("\"pageParameters\": {");
            sbJson.Append(GenerateJsonPageParameters(pageParameters));
            sbJson.Append("}");

            sbJson.Append("}");
            return(sbJson.ToString());
        }
Example #5
0
        internal static IHtmlString MVCGrid(this HtmlHelper helper, string name, IMVCGridDefinition grid, object pageParameters, QueryOptions options = null)
        {
            GridEngine ge = new GridEngine();

            string html = ge.GetBasePageHtml(helper, name, grid, pageParameters, options);

            return(MvcHtmlString.Create(html));
        }
        internal static IHtmlString MVCGrid(this HtmlHelper helper, string name, IMVCGridDefinition grid, object pageParameters)
        {
            GridEngine        ge      = new GridEngine();
            ControllerContext context = helper.ViewContext.Controller.ControllerContext;
            string            html    = ge.GetBasePageHtml(/*helper, */ HttpContext.Current.Request.QueryString, name, grid, pageParameters);

            return(MvcHtmlString.Create(html));
        }
        internal static IHtmlString MVCGrid(this HtmlHelper helper, string name, IMVCGridDefinition grid, object pageParameters)
        {
            GridEngine ge = new GridEngine();

            string html = ge.GetBasePageHtml(helper, name, grid, pageParameters);

            return MvcHtmlString.Create(html);
        }
        private static string GenerateClientDefinitionJson(string gridName, IMVCGridDefinition def, object pageParameters)
        {
            StringBuilder sbJson = new StringBuilder();

            sbJson.Append("{");
            sbJson.AppendFormat("\"name\": \"{0}\"", gridName);
            sbJson.Append(",");
            sbJson.AppendFormat("\"qsPrefix\": \"{0}\"", def.QueryStringPrefix);
            sbJson.Append(",");

            bool preloadedAlready = def.PreloadData;

            if (!def.QueryOnPageLoad)
            {
                preloadedAlready = true;
            }
            sbJson.AppendFormat("\"preloaded\": {0}", preloadedAlready.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"clientLoading\": \"{0}\"", def.ClientSideLoadingMessageFunctionName);

            sbJson.Append(",");
            sbJson.AppendFormat("\"clientLoadingComplete\": \"{0}\"", def.ClientSideLoadingCompleteFunctionName);

            sbJson.Append(",");
            sbJson.AppendFormat("\"renderingMode\": \"{0}\"", def.RenderingMode.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"browserNavigationMode\": \"{0}\"", def.BrowserNavigationMode.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"persistLastState\": \"{0}\"", def.PersistLastState.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"spinnerEnabled\": \"{0}\"", def.SpinnerEnabled.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"spinnerTargetElementId\": \"{0}\"", def.SpinnerTargetElementId);

            sbJson.Append(",");
            sbJson.AppendFormat("\"spinnerRadius\": \"{0}\"", def.SpinnerRadius);

            sbJson.Append(",");
            sbJson.AppendFormat("\"enableRowSelect\": \"{0}\"", def.EnableRowSelect.ToString().ToLowerInvariant());

            sbJson.Append(",");
            sbJson.AppendFormat("\"clientRowSelect\": \"{0}\"", def.ClientSideRowSelectFunctionName);

            sbJson.Append(",");
            sbJson.Append("\"pageParameters\": {");
            sbJson.Append(GenerateJsonPageParameters(pageParameters));
            sbJson.Append("}");

            sbJson.Append("}");
            return(sbJson.ToString());
        }
Example #9
0
        private static string RenderPreloadedGridHtml(HtmlHelper helper, IMVCGridDefinition grid, string gridName, object pageParameters, QueryOptions options = null)
        {
            string preload = "";

            if (options == null)
            {
                options = GridOptionParser.ParseOptions(grid, gridName, System.Web.HttpContext.Current.Request);
            }

            // set the page parameters for the preloaded grid
            Dictionary <string, string> pageParamsDict = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            if (pageParameters != null)
            {
                foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(pageParameters))
                {
                    object obj2 = descriptor.GetValue(pageParameters);
                    pageParamsDict.Add(descriptor.Name, obj2.ToString());
                }
            }
            if (grid.PageParameterNames.Count > 0)
            {
                foreach (var aqon in grid.PageParameterNames)
                {
                    string val = "";

                    if (pageParamsDict.ContainsKey(aqon))
                    {
                        val = pageParamsDict[aqon];
                    }

                    options.PageParameters[aqon] = val;
                }
            }

            var gridContext = GridContextUtility.Create(HttpContext.Current, gridName, grid, options);

            GridEngine engine = new GridEngine();

            switch (grid.RenderingMode)
            {
            case Models.RenderingMode.RenderingEngine:
                preload = RenderUsingRenderingEngine(engine, gridContext);
                break;

            case Models.RenderingMode.Controller:
                preload = RenderUsingController(engine, gridContext, helper);
                break;

            default:
                throw new InvalidOperationException();
            }
            return(preload);
        }
Example #10
0
        private static string RenderPreloadedGridHtml(IMVCGridDefinition grid, string gridName, object pageParameters)
        {
            string preload = string.Empty;

            var options = QueryStringParser.ParseOptions(grid, HttpHelper.HttpContext.Request.ToNameValueCollection());

            // set the page parameters for the preloaded grid
            Dictionary <string, string> pageParamsDict = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            if (pageParameters != null)
            {
                foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(pageParameters))
                {
                    object obj2 = descriptor.GetValue(pageParameters);
                    pageParamsDict.Add(descriptor.Name, obj2.ToString());
                }
            }
            if (grid.PageParameterNames.Count > 0)
            {
                foreach (var aqon in grid.PageParameterNames)
                {
                    string val = "";

                    if (pageParamsDict.ContainsKey(aqon))
                    {
                        val = pageParamsDict[aqon];
                    }

                    options.PageParameters[aqon] = val;
                }
            }

            var gridContext = GridContextUtility.Create(/*HttpContext.Current,*/ gridName, grid, options);

            GridEngine engine = new GridEngine();

            switch (grid.RenderingMode)
            {
            case RenderingMode.RenderingEngine:
                preload = RenderUsingRenderingEngine(engine, gridContext);
                break;

            // TODO: Enable support for controller rendering
            //case Models.RenderingMode.Controller:
            //    preload = RenderUsingController(engine, gridContext);
            //    break;
            default:
                throw new InvalidOperationException();
            }
            return(preload);
        }
Example #11
0
        private static string RenderContainerUsingRenderingEngine(IMVCGridDefinition gridDefinition, ContainerRenderingModel model)
        {
            IMVCGridRenderingEngine renderingEngine = GetRenderingEngineInternal(gridDefinition);

            using (MemoryStream ms = new MemoryStream())
            {
                using (TextWriter tw = new StreamWriter(ms))
                {
                    renderingEngine.RenderContainer(model, tw);
                }

                return(LocalEncoding.GetString(ms.ToArray()));
            }
        }
Example #12
0
        internal static IMVCGridRenderingEngine GetRenderingEngineInternal(IMVCGridDefinition gridDefinition)
        {
            string engineName = gridDefinition.DefaultRenderingEngineName;

            if (gridDefinition.RenderingEngines[engineName] == null)
            {
                throw new Exception(String.Format("The requested default rendering engine '{0}' was not found.", engineName));
            }

            string typeString = gridDefinition.RenderingEngines[engineName].Type;
            Type   engineType = Type.GetType(typeString, true);
            IMVCGridRenderingEngine renderingEngine = (IMVCGridRenderingEngine)Activator.CreateInstance(engineType, true);

            return(renderingEngine);
        }
        internal static GridContext Create(HttpContext context, string gridName, IMVCGridDefinition grid, QueryOptions options)
        {
            var httpContext = new HttpContextWrapper(context);
            var urlHelper   = new System.Web.Mvc.UrlHelper(new RequestContext(httpContext, new RouteData()));

            var gridContext = new GridContext()
            {
                GridName           = gridName,
                CurrentHttpContext = context,
                GridDefinition     = grid,
                QueryOptions       = options,
                UrlHelper          = urlHelper
            };

            return(gridContext);
        }
Example #14
0
        internal static IMVCGridRenderingEngine GetRenderingEngineInternal(IMVCGridDefinition gridDefinition)
        {
            string engineName = gridDefinition.DefaultRenderingEngineName;

            if (gridDefinition.RenderingEngines[engineName] == null)
            {
                throw new ConfigurationException(String.Format("The requested default rendering engine '{0}' was not found.", engineName));
            }

            string typeString = gridDefinition.RenderingEngines[engineName].Type;
            Type engineType = Type.GetType(typeString, true);

            IMVCGridRenderingEngine renderingEngine = (IMVCGridRenderingEngine)Activator.CreateInstance(engineType, true);

            return renderingEngine;
        }
Example #15
0
        private static string RenderContainerUsingController(IMVCGridDefinition gridDefinition, HtmlHelper helper, ContainerRenderingModel model)
        {
            var controllerContext  = helper.ViewContext.Controller.ControllerContext;
            ViewDataDictionary vdd = new ViewDataDictionary(model);
            TempDataDictionary tdd = new TempDataDictionary();

            using (var sw = new StringWriter())
            {
                var viewResult = ViewEngines.Engines.FindPartialView(controllerContext,
                                                                     gridDefinition.ContainerViewPath);
                var viewContext = new ViewContext(controllerContext, viewResult.View, vdd, tdd, sw);
                viewResult.View.Render(viewContext, sw);
                viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View);
                return(sw.GetStringBuilder().ToString());
            }
        }
        internal static GridContext Create(HttpContext context, string gridName, IMVCGridDefinition grid, QueryOptions options)
        {
            var httpContext = new HttpContextWrapper(context);
            var urlHelper = new System.Web.Mvc.UrlHelper(new RequestContext(httpContext, new RouteData()));

            var gridContext = new GridContext()
            {
                GridName = gridName,
                CurrentHttpContext = context,
                GridDefinition = grid,
                QueryOptions = options,
                UrlHelper = urlHelper
            };

            return gridContext;
        }
Example #17
0
 private static string RenderContainerUsingController(IMVCGridDefinition gridDefinition /*, HtmlHelper helper*/, ContainerRenderingModel model)
 {
     return(string.Empty);
     //var controllerContext = helper.ViewContext.Controller.ControllerContext;
     //ViewDataDictionary vdd = new ViewDataDictionary(model);
     //TempDataDictionary tdd = new TempDataDictionary();
     //using (var sw = new StringWriter())
     //{
     //    var viewResult = ViewEngines.Engines.FindPartialView(controllerContext,
     //                                                             gridDefinition.ContainerViewPath);
     //    var viewContext = new ViewContext(controllerContext, viewResult.View, vdd, tdd, sw);
     //    viewResult.View.Render(viewContext, sw);
     //    viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View);
     //    return sw.GetStringBuilder().ToString();
     //}
 }
Example #18
0
        public IActionResult Grid()
        {
            string             gridName    = HttpContext.Request.Query["Name"];
            IMVCGridDefinition grid        = MVCGridDefinitionTable.GetDefinitionInterface(gridName);
            QueryOptions       options     = QueryStringParser.ParseOptions(grid, HttpHelper.HttpContext.Request.ToNameValueCollection());
            GridContext        gridContext = GridContextUtility.Create(/*context, */ gridName, grid, options);

            GridEngine engine = new GridEngine();

            if (!engine.CheckAuthorization(gridContext))
            {
                return(new StatusCodeResult(403));
            }

            var renderingModel = engine.GenerateModel(gridContext);

            return(PartialView(grid.ViewPath, renderingModel));
        }
Example #19
0
        private static NameValueCollection GetQueryCollection(IMVCGridDefinition grid, string gridName, HttpRequest httpRequest)
        {
            if (grid.PersistLastState)
            {
                var gridState = httpRequest.Cookies["gridState_" + gridName];
                if (!string.IsNullOrEmpty(gridState?.Value))
                {
                    var url        = gridState.Value;
                    var queryStart = url.IndexOf("?", StringComparison.OrdinalIgnoreCase);
                    if (queryStart >= 0)
                    {
                        return(HttpUtility.ParseQueryString(url.Substring(queryStart)));
                    }
                }
            }

            return(httpRequest.QueryString);
        }
        public static string GenerateBasePageHtml(string gridName, IMVCGridDefinition def, object pageParameters, string applicationPath = "")
        {
            string definitionJson = GenerateClientDefinitionJson(gridName, def, pageParameters);

            StringBuilder sbHtml = new StringBuilder();

            sbHtml.AppendFormat("<div id='{0}' data-uid='' class='{1}'>", HtmlUtility.GetContainerHtmlId(gridName), HtmlUtility.ContainerCssClass);

            sbHtml.AppendFormat("<input type='hidden' name='MVCGridName' value='{0}' />", gridName);
            sbHtml.AppendFormat("<div id='MVCGrid_{0}_JsonData' style='display: none'>{1}</div>", gridName, definitionJson);

            sbHtml.AppendFormat("<div id='MVCGrid_ErrorMessage_{0}' style='display: none;'>", gridName);
            if (String.IsNullOrWhiteSpace(def.ErrorMessageHtml))
            {
                sbHtml.Append("An error has occured.");
            }
            else
            {
                sbHtml.Append(def.ErrorMessageHtml);
            }
            sbHtml.Append("</div>");

            bool renderLoadingDiv = def.GetAdditionalSetting <bool>(RenderLoadingDivSettingName, true);

            if (renderLoadingDiv)
            {
                if (string.IsNullOrEmpty(applicationPath) == true)
                {
                    applicationPath = HtmlUtility.GetHandlerPath();
                }
                sbHtml.AppendFormat("<div id='MVCGrid_Loading_{0}' class='text-center' style='visibility: hidden'>", gridName);
                sbHtml.AppendFormat("&nbsp;&nbsp;&nbsp;<img src='{0}/ajaxloader.gif' alt='{1}' style='width: 15px; height: 15px;' />", applicationPath, def.ProcessingMessage);
                sbHtml.AppendFormat("&nbsp;{0}...", def.ProcessingMessage);
                sbHtml.Append("</div>");
            }

            sbHtml.AppendFormat("<div id='{0}'>", HtmlUtility.GetTableHolderHtmlId(gridName));
            sbHtml.Append("%%PRELOAD%%");
            sbHtml.Append("</div>");

            sbHtml.AppendLine("</div>");

            return(sbHtml.ToString());
        }
Example #21
0
        public string GetBasePageHtml(string gridName, IMVCGridDefinition grid, object pageParameters)
        {
            string preload = "";

            if (grid.QueryOnPageLoad && grid.PreloadData)
            {
                try
                {
                    preload = RenderPreloadedGridHtml(grid, gridName, pageParameters);
                }
                catch (Exception ex)
                {
                    bool showDetails = ConfigUtility.GetShowErrorDetailsSetting();

                    if (showDetails)
                    {
                        string detail = "<div class='alert alert-danger'>";
                        detail += HttpUtility.HtmlEncode(ex.ToString()).Replace("\r\n", "<br />");
                        detail += "</div>";

                        preload = detail;
                    }
                    else
                    {
                        preload = grid.ErrorMessageHtml;
                    }
                }
            }

            string rootUrl      = HtmlUtility.GetRootUrl();
            string baseGridHtml = MVCGridHtmlGenerator.GenerateBasePageHtml(gridName, grid, pageParameters, HtmlUtility.GetHandlerPath(rootUrl));

            baseGridHtml = baseGridHtml.Replace("%%PRELOAD%%", preload);

            ContainerRenderingModel containerRenderingModel = new ContainerRenderingModel()
            {
                InnerHtmlBlock = baseGridHtml
            };

            string html = RenderContainerHtml(grid, gridName, containerRenderingModel);

            return(html);
        }
Example #22
0
        public ActionResult Grid()
        {
            HttpContext        context     = System.Web.HttpContext.Current;
            string             gridName    = context.Request.QueryString["Name"];
            IMVCGridDefinition grid        = MVCGridDefinitionTable.GetDefinitionInterface(gridName);
            QueryOptions       options     = QueryStringParser.ParseOptions(grid, context.Request.QueryString);
            GridContext        gridContext = GridContextUtility.Create(/*context, */ gridName, grid, options);

            GridEngine engine = new GridEngine();

            if (!engine.CheckAuthorization(gridContext, context.User.Identity.IsAuthenticated))
            {
                return(new HttpStatusCodeResult(403, "Access denied"));
            }

            var renderingModel = engine.GenerateModel(gridContext);

            return(PartialView(grid.ViewPath, renderingModel));
        }
        public static QueryOptions ParseOptions(IMVCGridDefinition grid, HttpRequest httpRequest)
        {
            string qsKeyPage = grid.QueryStringPrefix + QueryStringSuffix_Page;
            string qsKeySort = grid.QueryStringPrefix + QueryStringSuffix_Sort;
            string qsKeyDirection = grid.QueryStringPrefix + QueryStringSuffix_SortDir;
            string qsKeyEngine = grid.QueryStringPrefix + QueryStringSuffix_Engine;
            string qsKeyPageSize = grid.QueryStringPrefix + QueryStringSuffix_ItemsPerPage;
            string qsColumns = grid.QueryStringPrefix + QueryStringSuffix_Columns;

            var options = new QueryOptions();

            if (httpRequest.QueryString[qsKeyEngine] != null)
            {
                string re = httpRequest.QueryString[qsKeyEngine];
                options.RenderingEngineName = re;
            }

            if (!grid.Paging)
            {
                options.ItemsPerPage = null;
                options.PageIndex = null;
            }
            else
            {
                options.ItemsPerPage = grid.ItemsPerPage;

                if (grid.AllowChangingPageSize)
                {
                    if (httpRequest.QueryString[qsKeyPageSize] != null)
                    {
                        int pageSize;
                        if (Int32.TryParse(httpRequest.QueryString[qsKeyPageSize], out pageSize))
                        {
                            options.ItemsPerPage = pageSize;
                        }
                    }

                    if (grid.MaxItemsPerPage.HasValue && grid.MaxItemsPerPage.Value < options.ItemsPerPage)
                    {
                        options.ItemsPerPage = grid.MaxItemsPerPage.Value;
                    }
                }

                if (options.ItemsPerPage <= 0)
                {
                    options.ItemsPerPage = 20;
                }

                options.PageIndex = 0;
                if (httpRequest.QueryString[qsKeyPage] != null)
                {
                    int pageNum;
                    if (Int32.TryParse(httpRequest.QueryString[qsKeyPage], out pageNum))
                    {
                        options.PageIndex = pageNum - 1;
                        if (options.PageIndex < 0) options.PageIndex = 0;
                    }
                }
            }

            if (!grid.Filtering)
            {
                //options.Filters
            }
            else
            {
                var filterableColumns = grid.GetColumns().Where(p => p.EnableFiltering);

                foreach (var col in filterableColumns)
                {
                    string qsKey = grid.QueryStringPrefix + col.ColumnName;

                    if (httpRequest.QueryString[qsKey] != null)
                    {
                        string filterValue = httpRequest.QueryString[qsKey];

                        if (!String.IsNullOrWhiteSpace(filterValue))
                        {
                            options.Filters.Add(col.ColumnName, filterValue);
                        }
                    }
                }
            }

            if (!grid.Sorting)
            {
                options.SortColumnName = null;
                options.SortColumnData = null;
                options.SortDirection = SortDirection.Unspecified;
            }
            else
            {
                options.SortColumnName = null;

                string sortColName = null;
                if (httpRequest.QueryString[qsKeySort] != null)
                {
                    sortColName = httpRequest.QueryString[qsKeySort];
                }

                if (String.IsNullOrWhiteSpace(sortColName))
                {
                    sortColName = grid.DefaultSortColumn;
                }

                string thisSortColName = sortColName.Trim().ToLower();

                // validate SortColumn
                var colDef = grid.GetColumns().SingleOrDefault(p => p.ColumnName.ToLower() == thisSortColName);


                if (colDef != null && !colDef.EnableSorting)
                {
                    colDef = null;
                }
                

                if (colDef != null)
                {
                    options.SortColumnName = colDef.ColumnName;
                    options.SortColumnData = colDef.SortColumnData;
                }
                

                options.SortDirection = grid.DefaultSortDirection;
                if (httpRequest.QueryString[qsKeyDirection] != null)
                {
                    string sortDir = httpRequest.QueryString[qsKeyDirection];
                    if (String.Compare(sortDir, "dsc", true) == 0)
                    {
                        options.SortDirection = SortDirection.Dsc;
                    }
                    else if (String.Compare(sortDir, "asc", true) == 0)
                    {
                        options.SortDirection = SortDirection.Asc;
                    }
                }
            }

            if (grid.AdditionalQueryOptionNames.Count > 0)
            {
                foreach (var aqon in grid.AdditionalQueryOptionNames)
                {
                    string qsKeyAQO = grid.QueryStringPrefix + aqon;
                    string val = "";

                    if (httpRequest.QueryString[qsKeyAQO] != null)
                    {
                        val = httpRequest.QueryString[qsKeyAQO];
                    }

                    options.AdditionalQueryOptions.Add(aqon, val);
                }
            }

            if (grid.PageParameterNames.Count > 0)
            {
                foreach (var aqon in grid.PageParameterNames)
                {
                    string qsKeyAQO = QueryStringPrefix_PageParameter + grid.QueryStringPrefix + aqon;
                    string val = "";

                    if (httpRequest.QueryString[qsKeyAQO] != null)
                    {
                        val = httpRequest.QueryString[qsKeyAQO];
                    }

                    options.PageParameters.Add(aqon, val);
                }
            }


            var gridColumns = grid.GetColumns();
            List<ColumnVisibility> requestedColumns = new List<ColumnVisibility>();
            if (httpRequest.QueryString[qsColumns] == null)
            {
                foreach (var gridColumn in gridColumns)
                {
                    requestedColumns.Add(
                        new ColumnVisibility() {
                            ColumnName = gridColumn.ColumnName,
                            Visible = gridColumn.Visible
                        });
                }
            }
            else
            {
                string cols = httpRequest.QueryString[qsColumns];

                string[] colParts = cols.Split(',', ';');

                foreach (var colPart in colParts)
                {
                    if (String.IsNullOrWhiteSpace(colPart))
                    {
                        continue;
                    }
                    string thisColPart = colPart.ToLower().Trim();

                    var gridColumn = gridColumns.SingleOrDefault(p => p.ColumnName.ToLower() == thisColPart);

                    if (gridColumn != null)
                    {
                        if (requestedColumns.SingleOrDefault(p=>p.ColumnName== gridColumn.ColumnName) == null)
                        {
                            requestedColumns.Add(
                                new ColumnVisibility()
                                {
                                    ColumnName = gridColumn.ColumnName,
                                    Visible = true
                                });
                        }
                    }
                }
            }

            foreach (var gridColumn in gridColumns)
            {
                var requestedCol = requestedColumns.SingleOrDefault(p => p.ColumnName == gridColumn.ColumnName);

                if (requestedCol == null)
                {
                    requestedCol = new ColumnVisibility() { ColumnName = gridColumn.ColumnName, Visible = false };
                    requestedColumns.Add(requestedCol);
                }

                if (!requestedCol.Visible && gridColumn.Visible && !gridColumn.AllowChangeVisibility)
                {
                    requestedCol.Visible = true;
                }
            }
            options.ColumnVisibility.AddRange(requestedColumns);

            return options;
        }
Example #24
0
        internal static IHtmlContent MVCGridNetCore <TModel>(this IHtmlHelper <TModel> helper, string name, IMVCGridDefinition grid, object pageParameters)
        {
            GridEngine ge = new GridEngine();

            string html = ge.GetBasePageHtml(name, grid, pageParameters);

            return(new HtmlString(html));
        }
Example #25
0
        public static QueryOptions ParseOptions(IMVCGridDefinition grid, NameValueCollection queryString)
        {
            string qsKeyPage      = grid.QueryStringPrefix + QueryStringSuffix_Page;
            string qsKeySort      = grid.QueryStringPrefix + QueryStringSuffix_Sort;
            string qsKeyDirection = grid.QueryStringPrefix + QueryStringSuffix_SortDir;
            string qsKeyEngine    = grid.QueryStringPrefix + QueryStringSuffix_Engine;
            string qsKeyPageSize  = grid.QueryStringPrefix + QueryStringSuffix_ItemsPerPage;
            string qsColumns      = grid.QueryStringPrefix + QueryStringSuffix_Columns;

            var options = new QueryOptions();

            if (queryString[qsKeyEngine] != null)
            {
                string re = queryString[qsKeyEngine];
                options.RenderingEngineName = re;
            }

            if (!grid.Paging)
            {
                options.ItemsPerPage = null;
                options.PageIndex    = null;
            }
            else
            {
                options.ItemsPerPage = grid.ItemsPerPage;

                if (grid.AllowChangingPageSize)
                {
                    if (queryString[qsKeyPageSize] != null)
                    {
                        int pageSize;
                        if (Int32.TryParse(queryString[qsKeyPageSize], out pageSize))
                        {
                            options.ItemsPerPage = pageSize;
                        }
                    }

                    if (grid.MaxItemsPerPage.HasValue && grid.MaxItemsPerPage.Value < options.ItemsPerPage)
                    {
                        options.ItemsPerPage = grid.MaxItemsPerPage.Value;
                    }
                }

                if (options.ItemsPerPage <= 0)
                {
                    options.ItemsPerPage = 20;
                }

                options.PageIndex = 0;
                if (queryString[qsKeyPage] != null)
                {
                    int pageNum;
                    if (Int32.TryParse(queryString[qsKeyPage], out pageNum))
                    {
                        options.PageIndex = pageNum - 1;
                        if (options.PageIndex < 0)
                        {
                            options.PageIndex = 0;
                        }
                    }
                }
            }

            if (!grid.Filtering)
            {
                //options.Filters
            }
            else
            {
                var filterableColumns = grid.GetColumns().Where(p => p.EnableFiltering);

                foreach (var col in filterableColumns)
                {
                    string qsKey = grid.QueryStringPrefix + col.ColumnName;

                    if (queryString[qsKey] != null)
                    {
                        string filterValue = queryString[qsKey];

                        if (!String.IsNullOrWhiteSpace(filterValue))
                        {
                            options.Filters.Add(col.ColumnName, filterValue);
                        }
                    }
                }
            }

            if (!grid.Sorting)
            {
                options.SortColumnName = null;
                options.SortColumnData = null;
                options.SortDirection  = SortDirection.Unspecified;
            }
            else
            {
                options.SortColumnName = null;

                string sortColName = null;
                if (queryString[qsKeySort] != null)
                {
                    sortColName = queryString[qsKeySort];
                }

                if (String.IsNullOrWhiteSpace(sortColName))
                {
                    sortColName = grid.DefaultSortColumn;
                }

                string thisSortColName = sortColName.Trim().ToLower();

                // validate SortColumn
                var colDef = grid.GetColumns().SingleOrDefault(p => p.ColumnName.ToLower() == thisSortColName);


                if (colDef != null && !colDef.EnableSorting)
                {
                    colDef = null;
                }


                if (colDef != null)
                {
                    options.SortColumnName = colDef.ColumnName;
                    options.SortColumnData = colDef.SortColumnData;
                }


                options.SortDirection = grid.DefaultSortDirection;
                if (queryString[qsKeyDirection] != null)
                {
                    string sortDir = queryString[qsKeyDirection];
                    if (String.Compare(sortDir, "dsc", true) == 0)
                    {
                        options.SortDirection = SortDirection.Dsc;
                    }
                    else if (String.Compare(sortDir, "asc", true) == 0)
                    {
                        options.SortDirection = SortDirection.Asc;
                    }
                }
            }

            if (grid.AdditionalQueryOptionNames.Count > 0)
            {
                foreach (var aqon in grid.AdditionalQueryOptionNames)
                {
                    string qsKeyAQO = grid.QueryStringPrefix + aqon;
                    string val      = "";

                    if (queryString[qsKeyAQO] != null)
                    {
                        val = queryString[qsKeyAQO];
                    }

                    options.AdditionalQueryOptions.Add(aqon, val);
                }
            }

            if (grid.PageParameterNames.Count > 0)
            {
                foreach (var aqon in grid.PageParameterNames)
                {
                    string qsKeyAQO = QueryStringPrefix_PageParameter + grid.QueryStringPrefix + aqon;
                    string val      = "";

                    if (queryString[qsKeyAQO] != null)
                    {
                        val = queryString[qsKeyAQO];
                    }

                    options.PageParameters.Add(aqon, val);
                }
            }


            var gridColumns = grid.GetColumns();
            List <ColumnVisibility> requestedColumns = new List <ColumnVisibility>();

            if (queryString[qsColumns] == null)
            {
                foreach (var gridColumn in gridColumns)
                {
                    requestedColumns.Add(
                        new ColumnVisibility()
                    {
                        ColumnName = gridColumn.ColumnName,
                        Visible    = gridColumn.Visible
                    });
                }
            }
            else
            {
                string cols = queryString[qsColumns];

                string[] colParts = cols.Split(',', ';');

                foreach (var colPart in colParts)
                {
                    if (String.IsNullOrWhiteSpace(colPart))
                    {
                        continue;
                    }
                    string thisColPart = colPart.ToLower().Trim();

                    var gridColumn = gridColumns.SingleOrDefault(p => p.ColumnName.ToLower() == thisColPart);

                    if (gridColumn != null)
                    {
                        if (requestedColumns.SingleOrDefault(p => p.ColumnName == gridColumn.ColumnName) == null)
                        {
                            requestedColumns.Add(
                                new ColumnVisibility()
                            {
                                ColumnName = gridColumn.ColumnName,
                                Visible    = true
                            });
                        }
                    }
                }
            }

            foreach (var gridColumn in gridColumns)
            {
                var requestedCol = requestedColumns.SingleOrDefault(p => p.ColumnName == gridColumn.ColumnName);

                if (requestedCol == null)
                {
                    requestedCol = new ColumnVisibility()
                    {
                        ColumnName = gridColumn.ColumnName, Visible = false
                    };
                    requestedColumns.Add(requestedCol);
                }

                if (!requestedCol.Visible && gridColumn.Visible && !gridColumn.AllowChangeVisibility)
                {
                    requestedCol.Visible = true;
                }
            }
            options.ColumnVisibility.AddRange(requestedColumns);

            return(options);
        }
        internal static IMVCGridRenderingEngine GetRenderingEngineInternal(IMVCGridDefinition gridDefinition)
        {
            IMVCGridRenderingEngine renderingEngine = (IMVCGridRenderingEngine)Activator.CreateInstance(gridDefinition.RenderingEngine, true);

            return renderingEngine;
        }
        internal static string GenerateBasePageHtml(string gridName, IMVCGridDefinition def, object pageParameters)
        {
            string definitionJson = GenerateClientDefinitionJson(gridName, def, pageParameters);

            StringBuilder sbHtml = new StringBuilder();

            sbHtml.AppendFormat("<div id='{0}' class='{1}'>", HtmlUtility.GetContainerHtmlId(gridName), HtmlUtility.ContainerCssClass);

            sbHtml.AppendFormat("<input type='hidden' name='MVCGridName' value='{0}' />", gridName);
            sbHtml.AppendFormat("<div id='MVCGrid_{0}_JsonData' style='display: none'>{1}</div>", gridName, definitionJson);

            sbHtml.AppendFormat("<div id='MVCGrid_ErrorMessage_{0}' style='display: none;'>", gridName);
            if (String.IsNullOrWhiteSpace(def.ErrorMessageHtml))
            {
                sbHtml.Append("An error has occured.");
            }
            else
            {
                sbHtml.Append(def.ErrorMessageHtml);
            }
            sbHtml.Append("</div>");

            bool renderLoadingDiv = def.GetAdditionalSetting<bool>(RenderLoadingDivSettingName, true);

            if (renderLoadingDiv)
            {
                sbHtml.AppendFormat("<div id='MVCGrid_Loading_{0}' class='text-center' style='visibility: hidden'>", gridName);
                sbHtml.AppendFormat("&nbsp;&nbsp;&nbsp;<img src='{0}/ajaxloader.gif' alt='{1}' style='width: 15px; height: 15px;' />", HtmlUtility.GetHandlerPath(), def.ProcessingMessage);
                sbHtml.AppendFormat("&nbsp;{0}...", def.ProcessingMessage);
                sbHtml.Append("</div>");
            }

            sbHtml.AppendFormat("<div id='{0}'>", HtmlUtility.GetTableHolderHtmlId(gridName));
            sbHtml.Append("%%PRELOAD%%");
            sbHtml.Append("</div>");

            sbHtml.AppendLine("</div>");

            return sbHtml.ToString();
        }
        private static string GenerateClientDefinitionJson(string gridName, IMVCGridDefinition def, object pageParameters)
        {
            StringBuilder sbJson = new StringBuilder();

            sbJson.Append("{");
            sbJson.AppendFormat("\"name\": \"{0}\"", gridName);
            sbJson.Append(",");
            sbJson.AppendFormat("\"qsPrefix\": \"{0}\"", def.QueryStringPrefix);
            sbJson.Append(",");

            bool preloadedAlready = def.PreloadData;
            if (!def.QueryOnPageLoad)
            {
                preloadedAlready = true;
            }
            sbJson.AppendFormat("\"preloaded\": {0}", preloadedAlready.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"clientLoading\": \"{0}\"", def.ClientSideLoadingMessageFunctionName);

            sbJson.Append(",");
            sbJson.AppendFormat("\"clientLoadingComplete\": \"{0}\"", def.ClientSideLoadingCompleteFunctionName);

            sbJson.Append(",");
            sbJson.AppendFormat("\"renderingMode\": \"{0}\"", def.RenderingMode.ToString().ToLower());

            sbJson.Append(",");
            sbJson.Append("\"pageParameters\": {");
            sbJson.Append(GenerateJsonPageParameters(pageParameters));
            sbJson.Append("}");

            sbJson.Append("}");
            return sbJson.ToString();
        }
Example #29
0
        private static string RenderContainerUsingRenderingEngine(IMVCGridDefinition gridDefinition, ContainerRenderingModel model)
        {
            IMVCGridRenderingEngine renderingEngine = GetRenderingEngineInternal(gridDefinition);

            using (MemoryStream ms = new MemoryStream())
            {
                using (TextWriter tw = new StreamWriter(ms))
                {
                    renderingEngine.RenderContainer(model, tw);
                }

                return LocalEncoding.GetString(ms.ToArray());
            }
        }
Example #30
0
 private static string RenderContainerUsingController(IMVCGridDefinition gridDefinition, HtmlHelper helper, ContainerRenderingModel model)
 {
     var controllerContext = helper.ViewContext.Controller.ControllerContext;
     ViewDataDictionary vdd = new ViewDataDictionary(model);
     TempDataDictionary tdd = new TempDataDictionary();
     using (var sw = new StringWriter())
     {
         var viewResult = ViewEngines.Engines.FindPartialView(controllerContext,
                                                                  gridDefinition.ContainerViewPath);
         var viewContext = new ViewContext(controllerContext, viewResult.View, vdd, tdd, sw);
         viewResult.View.Render(viewContext, sw);
         viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View);
         return sw.GetStringBuilder().ToString();
     }
 }
Example #31
0
        private static string RenderPreloadedGridHtml(HtmlHelper helper, IMVCGridDefinition grid, string gridName, object pageParameters)
        {
            string preload = "";

            var options = QueryStringParser.ParseOptions(grid, System.Web.HttpContext.Current.Request);

            // set the page parameters for the preloaded grid
            Dictionary<string, string> pageParamsDict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
            if (pageParameters != null)
            {
                foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(pageParameters))
                {
                    object obj2 = descriptor.GetValue(pageParameters);
                    pageParamsDict.Add(descriptor.Name, obj2.ToString());
                }
            }
            if (grid.PageParameterNames.Count > 0)
            {
                foreach (var aqon in grid.PageParameterNames)
                {
                    string val = "";

                    if (pageParamsDict.ContainsKey(aqon))
                    {
                        val = pageParamsDict[aqon];
                    }

                    options.PageParameters[aqon] = val;
                }
            }

            var gridContext = GridContextUtility.Create(HttpContext.Current, gridName, grid, options);

            GridEngine engine = new GridEngine();

            switch (grid.RenderingMode)
            {
                case Models.RenderingMode.RenderingEngine:
                    preload = RenderUsingRenderingEngine(engine, gridContext);
                    break;
                case Models.RenderingMode.Controller:
                    preload = RenderUsingController(engine, gridContext, helper);
                    break;
                default:
                    throw new InvalidOperationException();
            }
            return preload;
        }
Example #32
0
        private static string RenderContainerHtml(HtmlHelper helper, IMVCGridDefinition grid, string gridName, ContainerRenderingModel containerRenderingModel)
        {
            string container = containerRenderingModel.InnerHtmlBlock;
            switch (grid.RenderingMode)
            {
                case Models.RenderingMode.RenderingEngine:
                    var renderingEngine = GetRenderingEngineInternal(grid);
                    container = RenderContainerUsingRenderingEngine(grid, containerRenderingModel);
                    break;
                case Models.RenderingMode.Controller:
                    if (!String.IsNullOrWhiteSpace(grid.ContainerViewPath))
                    {
                        container = RenderContainerUsingController(grid, helper, containerRenderingModel);
                    }
                    break;
                default:
                    throw new InvalidOperationException();
            }

            if (!container.Contains(containerRenderingModel.InnerHtmlBlock))
            {
                throw new Exception("When rendering a container, you must output Model.InnerHtmlBlock inside the container (Raw).");
            }

            return container;
        }
Example #33
0
        public string GetBasePageHtml(HtmlHelper helper, string gridName, IMVCGridDefinition grid, object pageParameters)
        {
            string preload = "";
            if (grid.QueryOnPageLoad && grid.PreloadData)
            {
                try
                {
                    preload = RenderPreloadedGridHtml(helper, grid, gridName, pageParameters);
                }
                catch (Exception ex)
                {
                    bool showDetails = ConfigUtility.GetShowErrorDetailsSetting();

                    if (showDetails)
                    {
                        string detail = "<div class='alert alert-danger'>";
                        detail += HttpUtility.HtmlEncode(ex.ToString()).Replace("\r\n", "<br />");
                        detail += "</div>";

                        preload = detail;
                    }
                    else
                    {
                        preload = grid.ErrorMessageHtml;
                    }
                }
            }

            string baseGridHtml = MVCGridHtmlGenerator.GenerateBasePageHtml(gridName, grid, pageParameters);
            baseGridHtml = baseGridHtml.Replace("%%PRELOAD%%", preload);

            ContainerRenderingModel containerRenderingModel = new ContainerRenderingModel() { InnerHtmlBlock = baseGridHtml };

            string html = RenderContainerHtml(helper, grid, gridName, containerRenderingModel);

            return html;
        }
Example #34
0
        internal static GridContext Create(/*HttpContext context, */ string gridName, IMVCGridDefinition grid, QueryOptions options)
        {
            //var httpContext = new HttpContextWrapper(context);
            var gridContext = new GridContext()
            {
                GridName = gridName,
                //CurrentHttpContext = context,
                GridDefinition = grid,
                QueryOptions   = options,
            };

            return(gridContext);
        }
        internal static string GenerateBasePageHtml(string gridName, IMVCGridDefinition def, object pageParameters)
        {
            string definitionJson = GenerateClientDefinitionJson(gridName, def, pageParameters);

            StringBuilder sbHtml = new StringBuilder();

            sbHtml.AppendFormat("<div id='{0}' class='{1}'>", HtmlUtility.GetContainerHtmlId(gridName), HtmlUtility.ContainerCssClass);

            sbHtml.AppendFormat("<input type='hidden' name='MVCGridName' value='{0}' />", gridName);
            sbHtml.AppendFormat("<div id='MVCGrid_{0}_JsonData' style='display: none'>{1}</div>", gridName, definitionJson);

            sbHtml.AppendFormat("<div id='MVCGrid_ErrorMessage_{0}' style='display: none;'>", gridName);
            if (String.IsNullOrWhiteSpace(def.ErrorMessageHtml))
            {
                sbHtml.Append("An error has occured.");
            }
            else
            {
                sbHtml.Append(def.ErrorMessageHtml);
            }
            sbHtml.Append("</div>");

            sbHtml.AppendFormat("<div id='{0}'>", HtmlUtility.GetTableHolderHtmlId(gridName));
            sbHtml.Append("%%PRELOAD%%");
            sbHtml.Append("</div>");

            sbHtml.AppendLine("</div>");

            return sbHtml.ToString();
        }
        private static string GenerateClientDefinitionJson(string gridName, IMVCGridDefinition def, object pageParameters)
        {
            StringBuilder sbJson = new StringBuilder();

            sbJson.Append("{");
            sbJson.AppendFormat("\"name\": \"{0}\"", gridName);
            sbJson.Append(",");
            sbJson.AppendFormat("\"qsPrefix\": \"{0}\"", def.QueryStringPrefix);
            sbJson.Append(",");

            bool preloadedAlready = def.PreloadData;
            if (!def.QueryOnPageLoad)
            {
                preloadedAlready = true;
            }
            sbJson.AppendFormat("\"preloaded\": {0}", preloadedAlready.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"clientLoading\": \"{0}\"", def.ClientSideLoadingMessageFunctionName);

            sbJson.Append(",");
            sbJson.AppendFormat("\"clientLoadingComplete\": \"{0}\"", def.ClientSideLoadingCompleteFunctionName);

            sbJson.Append(",");
            sbJson.AppendFormat("\"renderingMode\": \"{0}\"", def.RenderingMode.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"browserNavigationMode\": \"{0}\"", def.BrowserNavigationMode.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"persistLastState\": \"{0}\"", def.PersistLastState.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"spinnerEnabled\": \"{0}\"", def.SpinnerEnabled.ToString().ToLower());

            sbJson.Append(",");
            sbJson.AppendFormat("\"spinnerTargetElementId\": \"{0}\"", def.SpinnerTargetElementId);

            sbJson.Append(",");
            sbJson.AppendFormat("\"spinnerRadius\": \"{0}\"", def.SpinnerRadius);

            sbJson.Append(",");
            sbJson.AppendFormat("\"enableRowSelect\": \"{0}\"", def.EnableRowSelect.ToString().ToLowerInvariant());

            sbJson.Append(",");
            sbJson.AppendFormat("\"clientRowSelect\": \"{0}\"", def.ClientSideRowSelectFunctionName);

            sbJson.Append(",");
            sbJson.Append("\"pageParameters\": {");
            sbJson.Append(GenerateJsonPageParameters(pageParameters));
            sbJson.Append("}");

            sbJson.Append("}");
            return sbJson.ToString();
        }