I am playing around with creating a custom tag helper in MVC 6 / ASP.Net vNext - the taghelper works fine, however is there a way to specify valid asp- attributes to use with the tag so they appear in intellisense? For example, I want asp-ajax and asp-onsuccess to come up in the intellisense list when adding a tag in the view that matches the criteria for my taghelper below:
[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"]);
}
}
Usage:
<form asp-ajax="true" asp-onsuccess="dothis();">
Thanks in advance
With what you have right now (Attributes = AjaxForm
) you'll get asp-ajax
in your IntelliSense for form
tags. If you want to also provide data-onsuccess
in IntelliSense on form
tags you can add another TargetElement
attribute, aka: [TargetElement("form", Attributes = "asp-onsuccess")]
. I want to note, that adding Attributes
like this only controls "when" the TagHelper
runs. Think of it like saying: Only run when these attributes are present on the HTML element.
If you want to consume the values of the attributes AND provide IntelliSense you can add properties:
public bool AspAjax { get; set; }
[HtmlAttributeName("asp-onsuccess")]
public string AspOnSuccess { get; set; }
This approach doesn't control "when" the TagHelper
runs but provides a way to input information into your TagHelper
. It will enable you to take their values and add them as data-
attributes. Note that by adding AspAjax
/AspOnSuccess
as properties their values no longer exist on output.Attributes
so you don't need to remove them.
Hopefully this helps!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With