예제 #1
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;
            return(tag);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
            }
        }