我正在玩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();">
提前致谢
答案 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
上的值不再存在,因此您无需删除它们。
希望这有帮助!