我已经创建了自定义编辑器模板和显示模板。我已将这些类型中的每一种放在我的 views 文件夹中的一个文件夹中。这些文件夹被命名为 EditorTemplate 或 DisplayTemplate,具体取决于创建的模板类型。
所以,现在我可以使用 EditorFor 来使用我的自定义编辑器模板,或者使用 DisplayFor 作为我的自定义编辑器模板。
我想为 LabelFor 创建一个自定义模板,但我还没有找到这样的例子。我会在我的 Views 文件夹中创建一个名为 Labeltemplate 的文件夹并在此处添加吗?
更新
我试图扩展 LabelFor 的原因是处理 KeyValuePair 类型的 Property。我想使用此属性的 Key 作为 Label,将值作为 Display。我问一个关于 DisplayFor 的问题这里来处理 Value。
我的解决方案最终成为>
@Html.DisplayFor(m => m.MyProperty, @Model.MyProperty.Key)
谢谢,
3 回答
LabelFor
不使用任何模板。它在 MVC 源代码中是硬编码的,无论你做什么,它都会吐出<label>
。如果要修改此行为,则必须编写自定义 html 帮助程序。
另一方面,如果您想使用模板,则必须使用 EditorFor/DisplayFor 帮助程序。因此,由于标签用于显示目的,您可以使用显示模板而不是使用
Html.LabelFor(x => x.Foo)
使用Html.DisplayFor(x => x.Foo)
。就自定义模板而言,要么使用[UIHint]
属性修饰Foo
属性,要么将其作为第二个参数传递给DisplayFor
帮助程序。更新:
根据您的评论,您不是要尝试修改标记,而只修改值。这就是 LabelFor 助手的第二个参数可以用于:
这将创建一个与 Foo 输入相关联的标签(正确分配的标签的
for
属性),但显示的文本是视图模型上Key
属性的文本。不支持为特定的 HTML Helper 方法(LabelFor)创建模板。
你可以:
使用元描述符标记您的模型,以更改作为标签的一部分显示的值:
您可以创建自己的自定义 HTML Helper 方法来退出标签:
如何覆盖@Html.LabelFor 模板?
您可以创建 DisplayTemplate 并通过模板名称访问它:
然后在 DisplayTemplates 文件夹中创建一个名为 label.cshtml 的模板。
要简化此调用,您可以编写一个处理此调用的扩展方法: