4

我正在尝试在 MVC 6 / ASP.Net vNext 中创建自定义标签助手 - taghelper 工作正常,但是有没有办法指定与标签一起使用的有效 asp- 属性,以便它们出现在智能感知中?例如,当在视图中添加与我的 taghelper 标准匹配的标签时,我希望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();">

提前致谢

4

1 回答 1

7

使用您现在拥有的 ( Attributes = AjaxForm),您将获得asp-ajax用于form标签的 IntelliSense。如果您还想data-onsuccess在标签上提供 IntelliSense,form您可以添加另一个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因此您无需删除它们。

希望这会有所帮助!

于 2015-05-27T17:51:31.720 回答