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