.net自定义html标签,c# - Net Core:在返回HTML的自定义标签助手中使用标签助手吗? - 堆栈内存溢出...

现在,这已成为我最喜欢的问题之一。 幸运的是,我已经处理了足够的标签助手。 这是代码。

[HtmlTargetElement(ParentAnchorTag)]

public class ParentActionTagHelper : TagHelper

{

private const string ParentAnchorTag = "p-a";

[HtmlAttributeNotBound]

[ViewContext]

public ViewContext viewContext { get; set; }

private readonly IHtmlGenerator _htmlGenerator;

public ParentActionTagHelper(IHtmlGenerator htmlGenerator)

{

_htmlGenerator = htmlGenerator;

}

public override void Process(TagHelperContext context, TagHelperOutput output)

{

output.TagName = "div";

var anchorTagHelper = new AnchorTagHelper(_htmlGenerator)

{

Action = "Privacy",

ViewContext = viewContext,

};

var anchorOutput = new TagHelperOutput("a", new TagHelperAttributeList(),

(useCachedResult, encoder) => Task.Factory.StartNew(

() => new DefaultTagHelperContent()));

anchorOutput.Content.AppendHtml("Privacy Link");

var anchorContext = new TagHelperContext(

new TagHelperAttributeList(new[]

{

new TagHelperAttribute("asp-action", new HtmlString("Privacy"))

}),

new Dictionary(),

Guid.NewGuid().ToString());

anchorTagHelper.ProcessAsync(anchorContext, anchorOutput).GetAwaiter().GetResult();

output.Content.SetHtmlContent(anchorOutput);

}

}

首先,要使用操作名称生成href属性,您需要操作名称,需要将ViewContext提供给AnchorTagHelper(否则将引发错误),您不能将其作为依赖项注入。 第6-8行说明了这一点,您还需要IHtmlGenerator,您只需要传递AnchroTagHelper构造函数即可。 然后,创建在实例化的定位标记帮助程序上调用processAsync方法所需的上下文TagHelperOutput和TagHelperContext。 (注意-我正在使用GetAwaiter()。GetResult(),因为在我的情况下此方法不是异步的,您可以将这段代码完全放在ProcessAsync重写的方法中)。 因此,我帮助您解决了问题。 我已经对其进行了测试,并且可以正常工作。

我的cshtml文件。 aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9BbFBaZC5wbmc= 我的输出。

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9WeGVaby5wbmc=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值