2017-03-02 47 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