public static FormItemTagHelper Create(string html) { var item = new FormItemTagHelper(); var tr = ParseHtml(html).QuerySelector("tr"); var tds = tr.QuerySelectorAll("td"); if (tds.Any()) { item.Title = tds[0].InnerHtml.TrimEnd(':'); var td = tds[1]; var colSpan = td.GetAttribute("colspan"); if (colSpan.IsNotNullOrWhiteSpace()) { item.ColSpan = colSpan.To <uint>(); } item.ChildContent = td.InnerHtml; item.Sort = tr.GetAttribute(EasyuiConsts.Item_Sort).ToNullable <int>(); item.ReplaceField = tr.GetAttribute(EasyuiConsts.Item_Replace); } return(item); }
private FormItemTagHelper CreateItemTag(string itemName, string itemTitle, TextboxTagHelper contentTag, int itemSort = int.MaxValue) { var tag = new FormItemTagHelper(); tag.Field = itemName; tag.Title = itemTitle; tag.Sort = itemSort; tag.ContentTag = contentTag; if (ItemWidth.HasValue && !tag.ColSpan.HasValue && contentTag.IsMultiline != true) { tag.Width = $"{ItemWidth}px"; } return(tag); }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { var table = new StringBuilder($"<table cellpadding={CellPadding}>"); CreateFormItem(); var childHtml = (await output.GetChildContentAsync()).GetContent(); if (childHtml.IsNotNullOrWhiteSpace()) { var childs = ParseHtml(childHtml).Body.Children; while (childs.Any() && childs[0].TagName != "TR") { childs = childs[0].Children; } foreach (var child in childs) { var itemTag = FormItemTagHelper.Create(child.OuterHtml); if (itemTag.ReplaceField.IsNotNullOrWhiteSpace()) { var replaceTag = _formItems.FirstOrDefault(x => x.Field.Equals(itemTag.ReplaceField, StringComparison.CurrentCultureIgnoreCase)); if (replaceTag != null) { if (!itemTag.Sort.HasValue) { itemTag.Sort = replaceTag.Sort; } itemTag.Field = replaceTag.Field; if (itemTag.Title.IsNullOrWhiteSpace()) { itemTag.Title = replaceTag.Title; } //itemTag.ContentTag = replaceTag.ContentTag; _formItems.Remove(replaceTag); } } _formItems.Add(itemTag); } } #region 标签转html uint index = 0; foreach (var item in _formItems.OrderBy(x => x.Sort)) { if (_item.Contains(item.Field)) { continue; } index++; var remainder = index % ColCount;//余数 StringBuilder td = new StringBuilder(); if (item.Group.IsNotNullOrWhiteSpace()) { var groupIndex = 0; foreach (var groupItem in _formItems.Where(x => x.Group == item.Group)) { var itemContent = await RenderInnerTagHelper(groupItem, context, CreateTagHelperOutput(), false); var doc = new HtmlParser().ParseDocument($"<table><tr>{itemContent}</tr></table>"); var items = doc.QuerySelectorAll("td"); if (groupIndex == 0) { td.Append(items[0].OuterHtml); td.Append($"<td {(groupItem.ColSpan.HasValue ? $"colspan='{groupItem.ColSpan}'" : "")}>"); } td.Append($"{groupItem.Before}{items[1].InnerHtml}{groupItem.After}"); _item.Add(groupItem.Field); groupIndex++; } td.Append("</td>"); } else { td.Append(await RenderInnerTagHelper(item, context, CreateTagHelperOutput(), false)); } if (item.ColSpan.HasValue) { var itemColCount = (item.ColSpan + 1) / ColCount; if (itemColCount >= (remainder == 0 ? ColCount : remainder)) { table.Append($"<tr>{td}</tr>"); index += itemColCount.Value + remainder; continue; } } if (index % ColCount == 1) { table.Append("<tr>"); } table.Append(td); if (index > 0 && remainder == 0 || _formItems.Count == 1) { table.Append("</tr>"); } } foreach (var textArea in _textAreas) { textArea.ColSpan = ColSpan; textArea.Height = RemarkHeight; textArea.MinWidth = "200px"; var remarkContent = await RenderInnerTagHelper(textArea, context, CreateTagHelperOutput(), false); table.Append($"<tr>{remarkContent}</tr>"); } #endregion table.Append("</table>"); foreach (var hideItem in _hideItems) { table.Append($"<input name=\"{hideItem.ToCamelCase()}\" type=\"hidden\" />"); } output.Content.SetHtmlContent(table.ToString()); await base.ProcessAsync(context, output); }