【发布时间】:2020-10-08 13:29:21
【问题描述】:
如果我在字符串类型的属性上使用Html.EditorFor,则生成的元素默认为“文本”类型的<input>。
或者,如果属性具有属性[DataType(DataType.MultilineText)],则Html.EditorFor 生成<textarea>。
但是,如果我使用标签助手,那么我必须为自己选择元素类型,例如<input asp-for='MyProperty' />。这可以使用有关属性的信息来确定输入的类型(文本、日期、电子邮件等),但将始终生成 <input>,而不是 <textarea>,即使我有 [DataType] 属性。
这似乎违背了我可以在一个地方从单行更改为多行的想法:模型。现在我必须浏览所有相关视图并自己进行更改。
在我看来,我完全有可能编写自己的标签助手,它可以查看属性属性并决定是生成 <input> 还是 <textarea>,但我找不到任何对预定义的引用.
有没有这种预定义的标签助手,如果没有,有什么原因吗?
【问题讨论】:
-
这就是重点。当您在视图中并使用
EditorFor时,您希望相信框架会为您选择合适的“编辑器”(输入、文本区域、使用日期/时间选择器等)。当您想要更多控制时,您可以在视图本身的特定情况下直接编写所需的 html 标记。如果您希望它在特定视图中显示为文本区域,请阅读,然后只需写<textarea asp-for="MyProperty"></textarea> -
是的,您可以自己编写,如果这对您的特定情况有帮助,它可以像一些表达式树魔术一样简单,并将其传递给标签助手中的 EditorFor。但是
EditorFor有什么问题,除了“它看起来像代码而不是 html”? -
我不同意这就是重点。如果您想获得比
Html.EditorFor提供的更精确的控制,那么您可以使用Html.TextAreaFor等,标签助手是无关紧要的。标签助手的要点是它们的语法比 Html 助手更方便,但似乎没有EditorFor助手的等价物。
标签: c# asp.net-core asp.net-core-tag-helpers