我想从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" />
。在这种情况下,我得到了一个NullReferenceException。
根据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 />
,这是没有意义的这个地方。
答案 0 :(得分:0)
您可以将TagHelper属性修改为仅触发具有input
属性且自动关闭的asp-for
元素。
这是InputTagHelper
类默认使用的内容:
[HtmlTargetElement("input", Attributes = "asp-for", TagStructure = TagStructure.WithoutEndTag)]