TagHelper指定有效的属性

时间:2015-05-27 13:52:32

标签: c# asp.net asp.net-mvc asp.net-core-mvc tag-helpers

我正在玩MVC 6 / ASP.Net vNext中创建一个自定义标记帮助器 - taghelper工作正常,但是有一种方法可以指定与标记一起使用的有效asp属性,以便它们出现在intellisense?例如,我希望在符合标准的视图中添加标记时, asp-ajax asp-onsuccess 会出现在intellisense列表中对于我的taghelper如下:

[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();">

提前致谢

1 个答案:

答案 0 :(得分:6)

根据您现在拥有的内容(Attributes = AjaxForm),您的IntelliSense中asp-ajax代码将获得form。如果您还希望在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上的值不再存在,因此您无需删除它们。

希望这有帮助!