Настраиваемая вспомогательная функция тега ввода Asp.NET Core, отображающая дубликаты флажков

Я создал помощник тега, который наследуется от InputTagHelper, как показано в ответе в этом сообщении https://stackoverflow.com/a/40489654/945651 .

Вот код

[HtmlTargetElement("input", Attributes = ForAttributeName)]
public class ExrInputTagHelper : InputTagHelper
{
    private const string ForAttributeName = "asp-for";

    [HtmlAttributeName("asp-disabled")]
    public bool IsDisabled { get; set; }

    public ExrInputTagHelper(IHtmlGenerator generator):base(generator) 
    {

    }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        if (IsDisabled)
        {
            var d = new TagHelperAttribute("disabled", "disabled");
            output.Attributes.Add(d);
        }
        base.Process(context, output);
    }
}

Это его использование:

<input asp-for="UsingCreditCard" type="checkbox" asp-disabled="@Model.UsingACH" />

Это прекрасно работает, но есть одна вопиющая проблема. Если тип ввода — флажок, он отображается дважды. Все остальные типы ввода работают отлично. Почему это происходит?

<input checked="checked" data-val="true" data-val-required="The UsingCreditCard field is required." id="UsingCreditCard" name="UsingCreditCard" type="checkbox" value="true">
<input checked="checked" id="UsingCreditCard" name="UsingCreditCard" type="checkbox" value="true">

Любые мысли очень ценятся.

Заранее спасибо.


person dherrin79    schedule 02.03.2017    source источник


Ответы (1)


В _ViewImports.cshtml добавьте строку @removeTagHelper. Вы добавляете новый InputTagHelper, который реализует все функции старого, и оба вызываются.

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@removeTagHelper Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AspNetCoreExample  // your assembly name

В InputTagHelper.cs , «флажок» реализован иначе, чем все остальные типы ввода; он создает 2 поля ввода для «флажка» (как флажок, так и скрытое поле поддержки). Поскольку он создает его по-другому, он не выполняет слияние атрибутов, чтобы избежать дублирования, а создает их снова.

person Ashley Lee    schedule 02.03.2017