internal virtual string Create(ControlFormProvider formProvider) { if (HtmlBuilder != null) { return(HtmlBuilder()); } if (childActions.Count > 0) { var sb = new StringBuilder(); sb.AppendFormat("<button data-toggle=\"dropdown\" class=\"{0} dropdown-toggle\">", string.IsNullOrEmpty(CssClass) ? "btn" : CssClass.Trim()); sb.Append(Text); sb.Append(" <span class=\"caret\"></span>"); sb.AppendFormat("</button>"); sb.Append("<ul class=\"dropdown-menu\">"); foreach (var childAction in childActions) { sb.Append(childAction); } sb.Append("</ul>"); return(sb.ToString()); } if (IsSubmitButton) { var attributes = new RouteValueDictionary(); if (!HtmlAttributes.IsNullOrEmpty()) { foreach (var attribute in HtmlAttributes) { attributes.Add(attribute.Key, attribute.Value); } } var cssClass = (formProvider.GetButtonSizeCssClass(ButtonSize) + " " + formProvider.GetButtonStyleCssClass(ButtonStyle) + " " + CssClass + (!IsValidationSupported ? " cancel" : "")).Trim(); if (!string.IsNullOrEmpty(cssClass)) { attributes.Add("class", cssClass); } if (!string.IsNullOrEmpty(ClientId)) { attributes.Add("id", ClientId); } if (!string.IsNullOrEmpty(ConfirmMessage)) { attributes.Add("onclick", string.Format("return confirm('{0}');", ConfirmMessage)); } if (!string.IsNullOrEmpty(ClientClickCode)) { attributes["onclick"] = ClientClickCode; } var tagBuilder = new TagBuilder("button") { InnerHtml = Text }; tagBuilder.MergeAttribute("type", "submit"); tagBuilder.MergeAttribute("value", Value); tagBuilder.MergeAttribute("name", Name); tagBuilder.MergeAttribute("id", "btn" + Name); tagBuilder.MergeAttribute("title", Description ?? Text); tagBuilder.MergeAttributes(attributes); if (!string.IsNullOrEmpty(IconCssClass)) { var icon = new TagBuilder("i"); icon.AddCssClass(IconCssClass); tagBuilder.InnerHtml = string.Concat(icon.ToString(), " ", Text); } return(tagBuilder.ToString(TagRenderMode.Normal)); } else { var attributes = new RouteValueDictionary(); if (!HtmlAttributes.IsNullOrEmpty()) { foreach (var attribute in HtmlAttributes) { attributes.Add(attribute.Key, attribute.Value); } } var cssClass = (formProvider.GetButtonSizeCssClass(ButtonSize) + " " + formProvider.GetButtonStyleCssClass(ButtonStyle) + " " + CssClass + (!IsValidationSupported ? " cancel" : "")).Trim(); if (!string.IsNullOrEmpty(cssClass)) { attributes.Add("class", cssClass); } if (!string.IsNullOrEmpty(ClientId)) { attributes.Add("id", ClientId); } if (!string.IsNullOrEmpty(ClientClickCode)) { attributes["onclick"] = ClientClickCode; } attributes["href"] = Url; if (IsShowModalDialog) { attributes.Add("data-toggle", "fancybox"); attributes.Add("data-fancybox-type", "iframe"); attributes.Add("data-fancybox-width", ModalDialogWidth); attributes.Add("data-fancybox-height", ModalDialogHeight); } var tagBuilder = new TagBuilder("a") { InnerHtml = Text }; tagBuilder.MergeAttributes(attributes); if (!string.IsNullOrEmpty(IconCssClass)) { var icon = new TagBuilder("i"); icon.AddCssClass(IconCssClass); tagBuilder.InnerHtml = string.Concat(icon.ToString(), " ", Text); } return(tagBuilder.ToString(TagRenderMode.Normal)); } }
private static void WriteJsonData <TModelRecord>(HttpResponseBase response, ControlGridFormRequest request, ControlGridAjaxData <TModelRecord> data, int totalRecords, ControlFormProvider formProvider, IList <ControlGridFormColumn> columns, ICollection <IControlGridFormRowAction> rowActions, Func <TModelRecord, object> getModelId, bool isSubGrid, bool isTreeGrid, Func <TModelRecord, dynamic> getParentId, Func <TModelRecord, bool> hasChildren) { using (var writer = new JsonTextWriter(response.Output) { Formatting = Formatting.None }) { writer.WriteStartObject(); writer.WritePropertyName("page"); writer.WriteValue(request.PageIndex); writer.WritePropertyName("records"); writer.WriteValue(totalRecords); writer.WritePropertyName("total"); writer.WriteValue((int)Math.Ceiling((totalRecords * 1d) / request.PageSize)); if (data.Callbacks.Count > 0) { writer.WritePropertyName("callback"); writer.WriteValue(string.Join("", data.Callbacks)); } writer.WritePropertyName("rows"); writer.WriteStartArray(); var needWriteValueDelimiter = false; foreach (TModelRecord item in data) { var jsonObject = new JObject { { "_id", Convert.ToString(getModelId(item)) } }; foreach (var column in columns) { jsonObject.Add(column.PropertyName, Convert.ToString(column.BuildHtml(item))); } if (isTreeGrid) { jsonObject.Add("_level", request.NodeLevel + 1); jsonObject.Add("_parentId", getParentId(item)); jsonObject.Add("_isLeaf", !hasChildren(item)); jsonObject.Add("_isExpanded", false); } if (rowActions.Count > 0) { var sb = new StringBuilder(); sb.Append("<table style=\"margin-left: auto; margin-right: auto; border: none; padding: 0;\">"); sb.Append("<tr>"); foreach (var action in rowActions) { if (!action.IsVisible(item)) { continue; } var enabled = action.IsEnable(item); var attributes = new RouteValueDictionary(action.GetAttributes(item)); sb.Append("<td style=\"border: none; background-color: transparent; padding: 0 2px;\">"); if (action.IsSubmitButton) { var value = action.GetValue(item); var cssClass = (formProvider.GetButtonSizeCssClass(action.ButtonSize) + " " + formProvider.GetButtonStyleCssClass(action.ButtonStyle) + " " + action.CssClass).Trim(); if (!string.IsNullOrEmpty(cssClass)) { attributes.Add("class", cssClass); } if (!enabled) { attributes.Add("disabled", "disabled"); } if (!string.IsNullOrEmpty(action.ClientClickCode)) { attributes.Add("onclick", action.ClientClickCode); } else { if (!string.IsNullOrEmpty(action.ConfirmMessage)) { attributes.Add("onclick", string.Format("return confirm('{0}');", action.ConfirmMessage)); } } attributes.Add("id", "btn" + Guid.NewGuid().ToString("N").ToLowerInvariant()); attributes.Add("style", "white-space: nowrap;"); var tagBuilder = new TagBuilder("button"); tagBuilder.MergeAttribute("type", "submit"); tagBuilder.MergeAttribute("name", action.Name); tagBuilder.InnerHtml = action.Text; tagBuilder.MergeAttribute("value", Convert.ToString(value)); tagBuilder.MergeAttributes(attributes, true); sb.Append(tagBuilder.ToString(TagRenderMode.Normal)); } else { var href = action.GetUrl(item); var cssClass = (formProvider.GetButtonSizeCssClass(action.ButtonSize) + " " + formProvider.GetButtonStyleCssClass(action.ButtonStyle) + " " + action.CssClass).Trim(); if (!string.IsNullOrEmpty(cssClass)) { if (enabled) { attributes.Add("class", cssClass); } else { attributes.Add("class", cssClass + " disabled"); } } else { if (!enabled) { attributes.Add("class", "disabled"); } } attributes.Add("style", "white-space: nowrap;"); if (action.IsShowModalDialog && enabled) { attributes.Add("data-toggle", "fancybox"); attributes.Add("data-fancybox-type", "iframe"); attributes.Add("data-fancybox-width", action.ModalDialogWidth); attributes.Add("data-fancybox-height", action.ModalDialogHeight); } var tagBuilder = new TagBuilder("a"); if (enabled) { tagBuilder.MergeAttribute("href", href ?? "javascript:void(0)"); } else { tagBuilder.MergeAttribute("href", "javascript:void(0)"); } tagBuilder.InnerHtml = action.Text; tagBuilder.MergeAttributes(attributes, true); sb.Append(tagBuilder.ToString(TagRenderMode.Normal)); } sb.Append("</td>"); } sb.Append("</tr>"); sb.Append("</table>"); jsonObject.Add("_RowActions", sb.ToString()); } else { jsonObject.Add("_RowActions", null); } if (needWriteValueDelimiter) { writer.WriteRaw(","); } writer.WriteRaw(jsonObject.ToString()); needWriteValueDelimiter = true; } if (isSubGrid && data.UserData.ContainsKey("_RowActions")) { if (needWriteValueDelimiter) { writer.WriteRaw(","); } writer.WriteStartObject(); writer.WritePropertyName("_RowActions"); writer.WriteValue(data.UserData["_RowActions"]); writer.WriteEndObject(); data.UserData.Remove("_RowActions"); } writer.WriteEndArray(); if (data.UserData.Count > 0) { writer.WritePropertyName("userdata"); writer.WriteStartObject(); foreach (var item in data.UserData) { writer.WritePropertyName(item.Key); writer.WriteValue(item.Value); } writer.WriteEndObject(); } writer.WriteEndObject(); writer.Flush(); } }