c# - Asp.NET Core 自定义 Input Tag Helper 呈现重复的复选框

标签 c# asp.net-core tag-helpers

我创建了一个继承自 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">

非常感谢任何想法。

提前致谢。

最佳答案

_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 个输入字段(复选框和支持隐藏字段)。由于它以不同的方式创建它,因此它不会合并属性以避免重复,而是再次创建它们。

关于c# - Asp.NET Core 自定义 Input Tag Helper 呈现重复的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42544961/

相关文章:

c# - 如何在 Entity Framework 投影中有效地获取远距离关系

c# - 有没有办法直接受益于 Roslyn C# 编译器的 AST?

c# - 类型 'MyApp' 已经包含 'MystatusBar' 的定义

Azure Active Directory - 更新用户 - 目标实体集当前不支持该请求

c# - 创建一个 TestServer 并使用 XUnit 和 ASP.NET Core 1.0 的依赖注入(inject)

c# - 如何访问 MVC .net 核心中返回的 Controller 的字段结果

jquery - 如何使用 jQuery 访问 Bool 值

c# - 从硬盘驱动器中的图像序列更改 WPF 图像中的图像会使图像变得漆黑且响应速度降低

javascript - 在 ASP.net Core 中使用标签助手将图像上传为 b64 字符串

javascript - 自定义验证TagHelper : Modify Child Element