gpt4 book ai didi

c# - 网络核心 : Use a Tag Helper in a Custom Tag Helper that returns Html?

转载 作者:行者123 更新时间:2023-12-04 13:41:05 30 4
gpt4 key购买 nike

除了在 .Net Core 2 中,我正在尝试解决这个问题。

Can I use a Tag Helper in a custom Tag Helper that returns html?


我想在标签助手中使用标签助手。我环顾四周,找不到任何其他人试图这样做,我是否使用了一个糟糕的约定,或者我是否缺少文档?

前任。标签助手 A 输出包含另一个标签助手的 HTML。”

我将如何解决下面的编译错误?

[HtmlTargetElement("tag-name")]
public class RazorTagHelper : TagHelper
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
StringBuilder sb = new StringBuilder();
sb.Append("<a asp-action=\"Home\" ");
output.Content.SetHtmlContent(sb.ToString());
}
}

有没有办法让我从 C# 处理标签助手?或者用标签助手重新处理输出 HTML?


从 Taylor Mullen 那里尝试了这个标记的解决方案:
var anchorTagHelper = new AnchorTagHelper
{
Action = "Home",
};

var anchorOutput = new TagHelperOutput("a", new TagHelperAttributeList(), (useCachedResult, encoder) => new HtmlString());
var anchorContext = new TagHelperContext(
new TagHelperAttributeList(new[] { new TagHelperAttribute("asp-action", new HtmlString("Home")) }),
new Dictionary<object, object>(),
Guid.NewGuid());
await anchorTagHelper.ProcessAsync(anchorContext, anchorOutput);
output.Content.SetHtmlContent(anchorOutput);

接收错误低于
There is no argument given that corresponds to the required formal parameter 'value' of 'HtmlString.HtmlString(string)'

最佳答案

现在这是我最喜欢的问题之一。谢天谢地,我已经处理了足够多的标签助手。这是代码。

[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<TagHelperContent>(
() => new DefaultTagHelperContent()));
anchorOutput.Content.AppendHtml("Privacy Link");
var anchorContext = new TagHelperContext(
new TagHelperAttributeList(new[]
{
new TagHelperAttribute("asp-action", new HtmlString("Privacy"))
}),
new Dictionary<object, object>(),
Guid.NewGuid().ToString());

anchorTagHelper.ProcessAsync(anchorContext, anchorOutput).GetAwaiter().GetResult();
output.Content.SetHtmlContent(anchorOutput);
}
}

首先,要使用 Action 名称生成 href 属性,您需要 Action 名称,您需要将 ViewContext 提供给 AnchorTagHelper(否则会引发错误),您不能将其作为依赖项注入(inject)。第 6-8 行解释说,您还需要 IHtmlGenerator,您只需要传递 AnchroTagHelper 构造函数。然后,您创建上下文 TagHelperOutput 和 TagHelperContext,以便在您实例化的 anchor 标记助手上调用 processAsync 方法。 (注意 - 我正在使用 GetAwaiter().GetResult() 因为在我的情况下这个方法不是异步的,你完全可以把这个代码放在 ProcessAsync 覆盖方法中)。所以我帮助这解决了你的问题。我已经测试过它并且它有效。

我的 cshtml 文件。
enter image description here
我的输出。

This is the output

关于c# - 网络核心 : Use a Tag Helper in a Custom Tag Helper that returns Html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56909990/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com