获取父属性的DisplayAttribute

时间:2012-02-07 17:44:15

标签: asp.net-mvc

我有一个View Model,其定义如下:

public class VariableViewModel
{
    public string TemplateName { get; set; }
    public bool Enabled { get; set; }
    public string Value { get; set; }
}

我在其他View模型中使用此模型:

public class CreateViewModel
{
    [Display(Name="First Name")]
    public VariableViewModel FirstName { get; set; }

    [Display(Name="Last Name")]
    public VariableViewModel LastName { get; set; }
}

我为VariableViewModel定义了一个编辑器模板:

@model VariableViewModel

@Html.HiddenFor(model => model.TemplateName)
@Html.HiddenFor(model => model.Enabled)
@Html.LabelFor(model => model.Value)
@Html.TextBoxFor(model => model.Value)

我的CreateViewModel的编辑器模板:

@model CreateViewModel

@Html.EditorFor(model => model.FirstName)
@Html.EditorFor(model => model.LastName)

现在我的编辑器模板正在创建标签,如下所示:

<label for="FirstName">Value</label>

是否有可能以查看父属性的DisplayAttribute的方式修改LabelFor以确定它应该使用什么而不是使用Value?我希望我的标签看起来像:

<label for="FirstName">First Name</label>
<label for="LastName">Last Name</label>

问题是Display属性不在我为其创建标签的属性上,而是在包含对象上。有没有办法完成我想要的东西?

1 个答案:

答案 0 :(得分:5)

在您的编辑器模板中,只需使用以下标签:

@Html.LabelFor(model => model.Value, ViewData.ModelMetadata.DisplayName)

我们将父显示名称作为标签的值传递。