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()); }
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); }
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()); }
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()); }
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); }
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); }
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())); } }
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); }
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; }
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; }
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(); //} }
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)); }
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(" <img src='{0}/ajaxloader.gif' alt='{1}' style='width: 15px; height: 15px;' />", applicationPath, def.ProcessingMessage); sbHtml.AppendFormat(" {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()); }
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); }
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; }
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)); }
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(" <img src='{0}/ajaxloader.gif' alt='{1}' style='width: 15px; height: 15px;' />", HtmlUtility.GetHandlerPath(), def.ProcessingMessage); sbHtml.AppendFormat(" {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(); }
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()); } }
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(); } }
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; }
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; }
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; }
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(); }