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; return(tag); }
public static FormItemTagHelper Create(string html) { var item = new FormItemTagHelper(); var doc = ParseHtml(html); var itemDiv = doc.QuerySelector(".layui-form-item"); item.Title = itemDiv.QuerySelector(".layui-form-label")?.InnerHtml; item.ChildContent = itemDiv.QuerySelector(".layui-input-block").InnerHtml; item.Sort = itemDiv.GetAttribute(LayuiConsts.Item_Sort).ToNullable <int>(); item.ReplaceField = itemDiv.GetAttribute(LayuiConsts.Item_Replace); item.ColSpan = itemDiv.GetAttribute(LayuiConsts.Colspan).ToNullable <uint>(); return(item); }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (ModelTagHelper.HasModel) { var form = new StringBuilder(); CreateFormItem(); var childHtml = (await output.GetChildContentAsync()).GetContent(); if (childHtml.IsNotNullOrWhiteSpace()) { var childs = ParseHtml(childHtml).QuerySelectorAll(".layui-form-item"); 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)) { index++; item.ColMd = 12 / ColCount; var remainder = index % ColCount;//余数 var formItem = await RenderInnerTagHelper(item, context, CreateTagHelperOutput(), false); if (item.ColSpan.HasValue) { var itemColCount = (item.ColSpan + 1) / ColCount; if (itemColCount >= (remainder == 0 ? ColCount : remainder)) { form.Append($"<div class=\"layui-row\">{formItem}</div>"); index += itemColCount.Value + remainder; continue; } } if (index % ColCount == 1) { form.Append("<div class=\"layui-row\">"); } form.Append(formItem); if (index > 0 && remainder == 0 || _formItems.Count == 1) { form.Append("</div>"); } } foreach (var textArea in _textAreas) { textArea.ColSpan = ColSpan; textArea.Height = RemarkHeight; textArea.MinWidth = "200px"; var remarkContent = await RenderInnerTagHelper(textArea, context, CreateTagHelperOutput(), false); form.Append($"<div class=\"layui-row\">{remarkContent}</div>"); } #endregion foreach (var hideItem in _hideItems) { form.Append($"<input name=\"{hideItem.ToCamelCase()}\" hidden=\"hidden\" />"); } output.Content.SetHtmlContent(form.ToString()); await base.ProcessAsync(context, output); } }