首页 文章

MVC3 显示模板

提问于
浏览
7

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

  • 6

    LabelFor不使用任何模板。它在 MVC 源代码中是硬编码的,无论你做什么,它都会吐出<label>

    如果要修改此行为,则必须编写自定义 html 帮助程序。

    另一方面,如果您想使用模板,则必须使用 EditorFor/DisplayFor 帮助程序。因此,由于标签用于显示目的,您可以使用显示模板而不是使用Html.LabelFor(x => x.Foo)使用Html.DisplayFor(x => x.Foo)。就自定义模板而言,要么使用[UIHint]属性修饰Foo属性,要么将其作为第二个参数传递给DisplayFor帮助程序。


    更新:

    根据您的评论,您不是要尝试修改标记,而只修改值。这就是 LabelFor 助手的第二个参数可以用于:

    @Html.LabelFor(x => x.Foo, Model.Key)
    @Html.EditorFor(x => x.Foo)
    

    这将创建一个与 Foo 输入相关联的标签(正确分配的标签的for属性),但显示的文本是视图模型上Key属性的文本。

  • 2

    不支持为特定的 HTML Helper 方法(LabelFor)创建模板。

    你可以:

    使用元描述符标记您的模型,以更改作为标签的一部分显示的值:

    [DisplayName("Custom Label")]
     public string Test {get;set;}
    

    您可以创建自己的自定义 HTML Helper 方法来退出标签:

    如何覆盖@Html.LabelFor 模板?

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

相关问题