Asp.NET 核心自定义输入标签助手呈现重复的复选框
Asp.NET Core custom Input Tag Helper rendering duplicate checkboxes
我创建了一个继承自 InputTagHelper 的标签助手,如此 post .
中的答案所示
这是代码
[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">
非常感谢任何想法。
提前致谢。
在 _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中,"checkbox"的实现方式与所有其他输入类型不同;它为 "checkbox" 创建了 2 个输入字段(复选框和支持隐藏字段)。由于它以不同的方式创建它,因此它不会合并属性以避免重复,而是重新创建它们。
我创建了一个继承自 InputTagHelper 的标签助手,如此 post
这是代码
[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">
非常感谢任何想法。
提前致谢。
在 _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中,"checkbox"的实现方式与所有其他输入类型不同;它为 "checkbox" 创建了 2 个输入字段(复选框和支持隐藏字段)。由于它以不同的方式创建它,因此它不会合并属性以避免重复,而是重新创建它们。