c# - El ayudante de etiqueta no se procesa en ASP.NET Core 2



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

Al registrar Tag Helpers, se requiere el ensamblaje , no el espacio de nombres, explicado en los docs .

... el segundo parámetro "Microsoft.AspNetCore.Mvc.TagHelpers" especifica el ensamblado que contiene los Tag Helpers. Microsoft.AspNetCore.Mvc.TagHelpers es el ensamblado de los Asistentes de etiqueta de núcleo ASP.NET integrados.

Entonces, en su caso, puede cambiar esto:

@addTagHelper *, X.TagHelpers

A esto:

@addTagHelper *, X

He agregado la siguiente etiqueta de ayuda:

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);
        }
    }
}

y luego en _ViewImports.cshtml agregué la línea:

@addTagHelper *, X.TagHelpers

El archivo está compilado correctamente y si presento un error de sintaxis, dotnet build me avisa al respecto.

Luego en una de mis páginas agrego:

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

Si cargo la página, no veo salida de consola en el lado del servidor y la k-validation-for y k-error-class se reenvían a la página generada tal cual (en lugar de agregar la clase has-danger al atributo de class ) .

¿Qué estoy haciendo mal?





asp.net-core-2.0