什么是 Html.EditorFor 的标签助手等价物

Jas*_*ent 6 c# asp.net-core asp.net-core-tag-helpers

如果我Html.EditorFor在字符串类型的属性上使用,则生成的元素默认<input>为“文本”类型。

或者,如果该属性具有该属性,[DataType(DataType.MultilineText)]Html.EditorFor生成一个<textarea>.

但是,如果我使用标签助手,那么我必须为自己选择元素类型,例如<input asp-for='MyProperty' />. 这可以使用有关属性的信息来确定输入的类型(文本、日期、电子邮件等),但将始终生成<input>,从不生成<textarea>,即使我有该[DataType]属性。

这似乎与我可以在一个地方从单行更改为多行的想法背道而驰:模型。现在我必须浏览所有相关视图并自己进行更改。

在我看来,我完全有可能编写自己的标签助手,它可以查看属性属性并决定是否生成<input><textarea>,但我找不到任何对预定义的引用。

有没有这样一个预定义的标签助手,如果没有,有什么原因吗?

Chr*_*att 1

无论如何,您讨论的一些内容实际上是InputTagHelper. 它将根据属性类型(布尔值的复选框等)在不同的输入类型之间动态切换。然而,正如您所指出的,它只会生成一个输入,因为它明确是一个输入标记帮助程序。对于文本区域有一个完全不同的标签帮助器。从技术上讲,创建自定义标签帮助器来实现您想要的功能是可行的,但这需要做大量的工作。如需参考,请参阅的来源InputTagHelper。目前,无法从标签帮助程序调用其他标签帮助程序,因此您需要将 for 的整个代码基本上合并InputTagHelperTextAreaTagHelper自定义标签帮助程序中。InputTagHelper通过继承自定义标签助手,然后覆盖Process调用base.Process(),然后自定义输出,您可能会节省一些工作。然而,这又比这里的简单答案更复杂。

长话短说,是的,这可以通过自定义标签助手来实现,但这需要一些工作。就我个人而言,我认为这有点多于它的价值,考虑到这只是一种情况:用 textarea 切换输入以进行多行输入,并且EditorFor如果您愿意,从技术上讲您仍然可以使用。

如果您想走这条路,微软有一篇文章/教程可以给您一个良好的开端。除此之外,只需研究现有助手的来源即可。