Ejemplo n.º 1
0
        public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = string.Empty;
            output.TagMode = TagMode.SelfClosing;

            using (var sw = new StringWriter())
            {
                var wrapper           = new StringWriter();
                var labelBuilder      = new TagBuilder("label");
                var selectBuilder     = new TagBuilder("select");
                var validationBuilder = new TagBuilder("validation");
                var format            = context.AllAttributes["asp-format"] != null ? context.AllAttributes["asp-format"].Value.ToString() : "";
                var labelCss          = context.AllAttributes["has-label"] != null ? context.AllAttributes["label-css"].Value.ToString() : "";
                var inputCss          = context.AllAttributes["input-css"] != null ? context.AllAttributes["input-css"].Value.ToString() : "";
                var validationCss     = Expression.Metadata.IsRequired || (context.AllAttributes["is-required"] != null && bool.Parse(context.AllAttributes["is-required"].Value.ToString())) ? context.AllAttributes["required-css"].Value.ToString() : "";

                if (Expression.Metadata.IsRequired)
                {
                    inputCss += " requiredField";
                }

                // generate label if exist
                if (context.AllAttributes["has-label"] != null && bool.Parse(context.AllAttributes["has-label"].Value.ToString()))
                {
                    labelBuilder = _generator.GenerateLabel(ViewContext, Expression.ModelExplorer, Expression.Name, Expression.Metadata.GetDisplayName(), new { @class = LabelCss });
                    labelBuilder.WriteTo(sw, NullHtmlEncoder.Default);
                }

                // generate actual input
                selectBuilder = _generator.GenerateSelect(ViewContext, Expression.ModelExplorer, "Please select", Expression.Name, SelectList, false, new { @class = inputCss, PlaceHolder = Expression.Metadata.GetDisplayName() });

                foreach (var attribute in context.AllAttributes)
                {
                    if (HtmlTagHelpers.IsAttributeAddible(attribute.Name))
                    {
                        if (attribute.Name == "v-model-name")
                        {
                            selectBuilder.Attributes.Remove("v-model");
                            selectBuilder.Attributes.Add("v-model", attribute.Value.ToString());
                        }
                        else if (attribute.Name == "v-get-text")
                        {
                            selectBuilder.Attributes.Remove("data-gettext");
                            selectBuilder.Attributes.Add("data-gettext", attribute.Value.ToString());
                        }
                        else
                        {
                            selectBuilder.Attributes.Add(attribute.Name, attribute.Value.ToString());
                        }
                    }
                }

                selectBuilder.WriteTo(sw, NullHtmlEncoder.Default);

                // generate validation if exist
                if (Expression.Metadata.IsRequired || (context.AllAttributes["is-required"] != null && bool.Parse(context.AllAttributes["is-required"].Value.ToString())))
                {
                    validationBuilder = _generator.GenerateValidationMessage(ViewContext, Expression.ModelExplorer, Expression.Name, null, ViewContext.ValidationMessageElement, new { @class = validationCss });
                    validationBuilder.WriteTo(sw, NullHtmlEncoder.Default);
                }

                // generate wrapper parent element if exist
                if (context.AllAttributes["has-parent"] != null && bool.Parse(context.AllAttributes["has-parent"].Value.ToString()))
                {
                    wrapper.Write("<div class='" + context.AllAttributes["parent-css"].Value + "'>");
                    wrapper.Write(sw.ToString());
                    wrapper.Write("</div>");
                }

                output.Content.SetHtmlContent(wrapper.ToString());
                //output.PreContent.SetHtmlContent("<div class=''>");
                //output.PostContent.SetHtmlContent("</div>");

                return(base.ProcessAsync(context, output));
            }
        }
Ejemplo n.º 2
0
        public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = string.Empty;
            output.TagMode = TagMode.SelfClosing;

            using (var sw = new StringWriter())
            {
                var wrapper           = new StringWriter();
                var labelBuilder      = new TagBuilder("label");
                var inputBuilder      = new TagBuilder("input");
                var validationBuilder = new TagBuilder("validation");
                var format            = context.AllAttributes["asp-format"] != null ? context.AllAttributes["asp-format"].Value.ToString() : "";
                var labelCss          = context.AllAttributes["has-label"] != null ? context.AllAttributes["label-css"].Value.ToString() : "";
                var inputCss          = context.AllAttributes["input-css"] != null ? context.AllAttributes["input-css"].Value.ToString() : "";
                var vmodel            = context.AllAttributes["VModelName"] != null ? context.AllAttributes["VModelName"].Value.ToString() : "";
                var validationCss     = Expression.Metadata.IsRequired || (context.AllAttributes["is-required"] != null && bool.Parse(context.AllAttributes["is-required"].Value.ToString())) ? context.AllAttributes["required-css"].Value.ToString() : "";

                if (Expression.Metadata.IsRequired)
                {
                    inputCss += " requiredField";
                }

                switch (Expression.Metadata.DataTypeName)
                {
                case "int":
                    inputCss += " inputOnly";
                    break;

                case "double":
                    inputCss += " doubleOnly";
                    break;

                case "decimal":
                    inputCss += " doubleOnly";
                    break;

                default:
                    break;
                }

                // generate label if exist
                if (context.AllAttributes["has-label"] != null && bool.Parse(context.AllAttributes["has-label"].Value.ToString()))
                {
                    labelBuilder = _generator.GenerateLabel(ViewContext, Expression.ModelExplorer, Expression.Name, Expression.Metadata.GetDisplayName(), new { @class = LabelCss });
                    labelBuilder.WriteTo(sw, NullHtmlEncoder.Default);
                }

                // generate actual input
                inputBuilder = _generator.GenerateTextBox(ViewContext, Expression.ModelExplorer, Expression.Name, Expression.Model, Expression.Metadata.DisplayFormatString, new { @class = inputCss, PlaceHolder = Expression.Metadata.GetDisplayName() });

                foreach (var validationAttribute in Expression.Metadata.ValidatorMetadata)
                {
                    if (validationAttribute.GetType().Name == "RegularExpressionAttribute")
                    {
                        var reAttr = (RegularExpressionAttribute)validationAttribute;
                        inputBuilder.Attributes.Add("pattern", reAttr.Pattern);
                    }
                }

                foreach (var attribute in context.AllAttributes)
                {
                    if (HtmlTagHelpers.IsAttributeAddible(attribute.Name))
                    {
                        if (attribute.Name == "place-holder")
                        {
                            inputBuilder.Attributes.Remove("placeholder");
                            inputBuilder.Attributes.Add("placeholder", attribute.Value.ToString());
                        }
                        else if (attribute.Name == "v-model-name")
                        {
                            inputBuilder.Attributes.Remove("v-model");
                            inputBuilder.Attributes.Add("v-model", attribute.Value.ToString());
                        }
                        else
                        {
                            inputBuilder.Attributes.Add(attribute.Name, attribute.Value.ToString());
                        }
                    }
                }

                inputBuilder.WriteTo(sw, NullHtmlEncoder.Default);

                // generate validation if exist
                if (Expression.Metadata.IsRequired || (context.AllAttributes["is-required"] != null && bool.Parse(context.AllAttributes["is-required"].Value.ToString())))
                {
                    validationBuilder = _generator.GenerateValidationMessage(ViewContext, Expression.ModelExplorer, Expression.Name, null, ViewContext.ValidationMessageElement, new { @class = validationCss });
                    validationBuilder.WriteTo(sw, NullHtmlEncoder.Default);
                }

                // generate wrapper parent element if exist
                if (context.AllAttributes["has-parent"] != null && bool.Parse(context.AllAttributes["has-parent"].Value.ToString()))
                {
                    wrapper.Write("<div class='" + context.AllAttributes["parent-css"].Value + "'>");
                    wrapper.Write(sw.ToString());
                    wrapper.Write("</div>");
                }

                output.Content.SetHtmlContent(wrapper.ToString());
                //output.PreContent.SetHtmlContent("<div class=''>");
                //output.PostContent.SetHtmlContent("</div>");

                return(base.ProcessAsync(context, output));
            }
        }