Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }