MVC3显示模板

时间:2011-12-07 17:43:16

标签: asp.net-mvc-3

我已经创建了自定义编辑器模板和显示模板。我已将这些类型中的每一种放在我的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)

谢谢,

3 个答案:

答案 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方法来退出标签:

How can I override the @Html.LabelFor template?

答案 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");
}