2012-02-07 24 views
0

我有一个被定义为一个视图模型如下:获取父的DisplayAttribute物业

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

我使用这种模式在其他视图模式:

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> 

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

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

的问题是,在显示属性是不是在我创建该标签的属性,但包含的对象上。有没有办法实现我想要的?

回答

5

在你的编辑器模板只需使用该标签的下面:

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

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