2017-03-02 133 views
3

我创建了一个继承自InputTagHelper的标签助手,如本帖子https://stackoverflow.com/a/40489654/945651中的答案所示。Asp.NET核心自定义输入标签助手呈现重复复选框

下面是代码

[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"> 

任何想法都非常感激。

在此先感谢。

回答

3

_ViewImports.cshtml中,添加@removeTagHelper一行。您正在添加一个新的InputTagHelper,它实现了旧的InputTagHelper的所有功能,并且都被调用。

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

InputTagHelper.cs中,“复选框”的实现方式与所有其他输入类型不同;它会为“复选框”(复选框和后备隐藏字段)创建2个输入字段。由于它以不同的方式创建它,因此它不会合并属性以避免重复,但会再次创建它们。

+0

谢谢。这个伎俩。欣赏快速反应。 – dherrin79