在没有For表达式的情况下扩展ASP.NET Core InputTagHelper类时出现NullReferenceException

时间:2016-12-10 20:02:29

标签: c# asp.net asp.net-core asp.net-core-mvc

我想从ASP.NET Core扩展buildin InputTagHelpers,简单的例子

[HtmlTargetElement("input")]
class TestTagHelper:InputTagHelper{
    public override void Process(TagHelperContext context, TagHelperOutput output) {
        base.Process(context,output);
    }
}

这应该调用默认的输入标记helper。它在From属性<input asp-for="SomeModelAttribute" />时工作正常,但在我没有与任何模型属性相关联的元素时,如提交按钮<input type="submit" />。在这种情况下,我得到了一个N​​ullReferenceException。

根据source code of the helper class,似乎以下几行引起了问题:

var metadata = For.Metadata;
var modelExplorer = For.ModelExplorer;

但奇怪的是,当我使用buildin taghelper而没有继承我的类(直接InputTagHelper)时,无论是否存在For属性,它都可以工作。我需要一个解决方案,因为当我调用基类的Process方法时,只有当For不为null时,它会破坏我的输入元素:<input type="submit" />呈现为<input />,这是没有意义的这个地方。

1 个答案:

答案 0 :(得分:0)

您可以将TagHelper属性修改为仅触发具有input属性且自动关闭的asp-for元素。

这是InputTagHelper类默认使用的内容:

[HtmlTargetElement("input", Attributes = "asp-for", TagStructure = TagStructure.WithoutEndTag)]