c# - Helper tag non elaborato in ASP.NET Core 2



asp.net-core asp.net-core-2.0 (1)

Ho aggiunto il seguente helper tag:

using System;
using System.Linq;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.TagHelpers;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;

namespace X.TagHelpers
{
    [HtmlTargetElement(Attributes = ValidationForAttributeName + "," + ValidationErrorClassName)]
    public class ValidationClassTagHelper : TagHelper
    {
        private const string ValidationForAttributeName = "k-validation-for";
        private const string ValidationErrorClassName = "k-error-class";

        [HtmlAttributeName(ValidationForAttributeName)]
        public ModelExpression For { get; set; }

        [HtmlAttributeName(ValidationErrorClassName)]
        public string ValidationErrorClass { get; set; }

        [HtmlAttributeNotBound]
        [ViewContext]
        public ViewContext ViewContext { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            Console.WriteLine("\n\n------------!!!!!!---------\n\n");
            ModelStateEntry entry;
            ViewContext.ViewData.ModelState.TryGetValue(For.Name, out entry);
            if (entry == null || !entry.Errors.Any()) return;
            var tagBuilder = new TagBuilder(context.TagName);
            tagBuilder.AddCssClass(ValidationErrorClass);
            output.MergeAttributes(tagBuilder);
        }
    }
}

e poi in _ViewImports.cshtml ho aggiunto la riga:

@addTagHelper *, X.TagHelpers

Il file è compilato correttamente e se introduco un errore di sintassi dotnet build mi avvisa a riguardo.

Quindi in una delle mie pagine aggiungo:

<div k-validation-for="OldPassword" k-error-class="has-danger"></div>

Se carico la pagina non vedo alcun output di console sul lato server e la k-validation-for e la k-error-class vengono inoltrate alla pagina generata così com'è (al contrario dell'aggiunta della classe has-danger all'attributo class ) .

Che cosa sto facendo di sbagliato?


Quando si registrano gli helper di tag, è necessario l' assembly , non lo spazio dei nomi, come spiegato nei docs .

... il secondo parametro "Microsoft.AspNetCore.Mvc.TagHelpers" specifica l'assembly contenente i tag helper. Microsoft.AspNetCore.Mvc.TagHelpers è l'assembly per gli helper di tag core ASP.NET integrati.

Quindi, nel tuo caso, puoi semplicemente cambiare questo:

@addTagHelper *, X.TagHelpers

A questo:

@addTagHelper *, X




asp.net-core-2.0