c# टैग सहायक को ASP.NET कोर 2 में संसाधित नहीं किया जा रहा है



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

टैग सहायकों को पंजीकृत करते समय, यह असेंबली की आवश्यकता है, नामस्थान नहीं - docs में समझाया गया।

... दूसरा पैरामीटर "Microsoft.AspNetCore.Mvc.TagHelpers" असेंबली में टैग हेल्पर्स निर्दिष्ट करता है। Microsoft.AspNetCore.Mvc.TagHelpers बिल्ट-इन ASP.NET कोर टैग हेल्पर्स के लिए असेंबली है।

तो आपके मामले में, आप इसे बदल सकते हैं:

@addTagHelper *, X.TagHelpers

इसके लिए:

@addTagHelper *, X

मैंने निम्नलिखित टैग सहायक जोड़ा है:

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

और फिर _ViewImports.cshtml मैंने लाइन जोड़ी है:

@addTagHelper *, X.TagHelpers

फ़ाइल को सही ढंग से संकलित किया गया है और अगर मैं एक सिंटैक्स त्रुटि का परिचय देता हूं तो dotnet build मुझे इसके बारे में चेतावनी देता है।

फिर मेरे एक पृष्ठ में मैं जोड़ता हूं:

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

यदि मैं पृष्ठ को लोड करता हूं तो मुझे सर्वर कंसोल पर कोई कंसोल आउटपुट नहीं दिखता है और k-validation-for और k-error-class जनरेट किए गए पृष्ठ पर भेज दिया जाता है (जैसा कि has-danger वर्ग को class विशेषता में जोड़ने के विरोध में) ।

मैं क्या गलत कर रहा हूं?





asp.net-core-2.0