Asp.net MVC核心自定义标签助手无法生成输出

时间:2020-05-20 07:39:54

标签: asp.net asp.net-mvc asp.net-core asp.net-core-tag-helpers

我实现了一个自定义标签帮助程序,以生成页码作为链接。将触发“ Process”方法,并且字符串生成器中包含所有HTML内容,但不会在屏幕上输出结果。它只是渲染,有人可以帮忙吗?

<paginate page="Model.PageInfo" />



[HtmlTargetElement("paginate",
     TagStructure = TagStructure.WithoutEndTag)]
    public class PaginateTagHelper : TagHelper
    {
        public PageInfo Page { get; set; }
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            StringBuilder html = new StringBuilder();
            html.Append("<div>");
            for (int i = 1; i <= Page.TotalPages; i++)
            {
                var tag = new Microsoft.AspNetCore.Mvc.Rendering.TagBuilder("a");
                tag.MergeAttribute("href", Page.PageUrl(i));
                tag.InnerHtml.AppendHtml(i.ToString());
                if (i == Page.CurrentPage)
                {
                    tag.AddCssClass("selected");
                    tag.AddCssClass("btn-primary");
                }
                tag.AddCssClass("btn btn-default");
                html.Append(GetTagContent(tag));
            }
            html.Append("</div>");
            output.Content.SetHtmlContent(html.ToString());
        }
        private string GetTagContent(IHtmlContent content)
        {
            using (var writer = new System.IO.StringWriter())
            {
                content.WriteTo(writer, System.Text.Encodings.Web.HtmlEncoder.Default);
                return writer.ToString();
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

删除TagStructure = TagStructure.WithoutEndTag,自闭标签不适用于具有内部内容的标签。

Self-closing TagHelpers

许多标签助手不能用作自动关闭标签。一些标签助手被设计为自动关闭标签。使用并非设计为自动关闭的Tag Helper会抑制呈现的输出。自闭合标签助手会在呈现的输出中产生自闭合标签。