jer*_*s38 5 c# asp.net-core-mvc .net-core tag-helpers asp.net-core
我正在尝试解决这个问题,除了.Net Core 2。
我可以在返回 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());
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让我从 C# 处理标签助手?或者使用标签助手重新处理输出 HTML?”
尝试了泰勒·马伦的这个标记解决方案:
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);
Run Code Online (Sandbox Code Playgroud)
接收错误如下
There is no argument given that corresponds to the required formal parameter 'value' of 'HtmlString.HtmlString(string)'
Run Code Online (Sandbox Code Playgroud)
小智 2
这是我最喜欢的问题之一。值得庆幸的是,我已经足够多地处理标签助手了。这是代码。
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
首先,要使用操作名称生成 href 属性,您需要操作名称,您需要向 AnchorTagHelper 提供 ViewContext(否则会抛出错误),您不能将其作为依赖项注入。第 6-8 行解释说,您还需要 IHtmlGenerator,只需传递 AnchroTagHelper 构造函数即可。然后,您创建上下文 TagHelperOutput 和 TagHelperContext ,以调用您实例化的锚标记帮助器上的 processAsync 方法。(注意 - 我使用 GetAwaiter().GetResult() 因为在我的情况下此方法不是异步的,您完全可以将此代码放入 ProcessAsync 重写方法中)。所以我帮助这解决你的问题。我已经测试过它并且有效。
| 归档时间: |
|
| 查看次数: |
2033 次 |
| 最近记录: |