TagHelper指定有效属性

4

我正在尝试在MVC 6 / ASP.Net vNext中创建自定义标签助手,标签助手运行良好,但是有没有一种方法可以指定适用于标签的有效 asp- 属性,以便它们出现在智能感知中?例如,当在视图中添加与我的标签助手条件匹配的标记时,我希望 asp-ajaxasp-onsuccess 出现在智能感知列表中:

[TargetElement("form", Attributes = AjaxForm)]
public class UnobtrusiveFormTagHelper : TagHelper
{
    private const string AjaxForm = "asp-ajax";

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        base.Process(context, output);

        output.Attributes.Add("data-ajax", true);
        output.Attributes.Add("data-onsuccess", context.AllAttributes["asp-onsuccess"]);

    }

}

使用方法:

<form asp-ajax="true" asp-onsuccess="dothis();">

Thanks in advance

1个回答

7

目前你拥有的 (Attributes = AjaxForm) 只能在表单标签(form)中获得asp-ajax 的 IntelliSense。如果你想在表单标签(form)上提供 data-onsuccess 的 IntelliSense,可以添加另一个TargetElement 属性: [TargetElement("form", Attributes = "asp-onsuccess")]。需要注意的是,像这样添加Attributes 可以控制TagHelper的运行时间,它只会在HTML元素中存在这些属性时才会运行。

如果你想要消费属性的值并提供IntelliSense,则可以添加属性:

public bool AspAjax { get; set; }

[HtmlAttributeName("asp-onsuccess")]
public string AspOnSuccess { get; set; }

这种方法不能控制TagHelper运行的“何时”,但是提供了一种将信息输入到您的TagHelper中的方法。它将使您能够获取它们的值并将它们添加为data-属性。请注意,通过将AspAjax/AspOnSuccess添加为属性,它们的值不再存在于output.Attributes上,因此您无需删除它们。

希望这有所帮助!


谢谢,这正是我所需要的 :) - Carl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接