2017-03-02 18 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" /> 

これは素晴らしい作品が、1つの明白な問題があります。入力タイプがチェックボックスの場合は、2回レンダリングされます。他のすべての入力タイプはうまく動作します。なぜこれが起こっていますか?

<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を追加しています。両方とも呼び出されています。

@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

関連する問題