更改外部属性的显示名称

时间:2014-06-26 18:45:57

标签: c# asp.net-mvc

我有两个具有此结构的表,这是实体框架数据模型:

public partial class Sensores
{
    public int idSensor { get; set; }
    public int idTipo { get; set; }
    public int idFigura { get; set; }
    public string nombre { get; set; }

    public virtual TipoSensores TipoSensores { get; set; }
}

public partial class TipoSensores
{
    public TipoSensores()
    {
        this.Sensores = new HashSet<Sensores>();
    }

    public int idTipo { get; set; }
    public string nombre { get; set; }

    public virtual ICollection<Sensores> Sensores { get; set; }
}

所以我的元数据类改变了显示名称

[MetadataType(typeof(TipoSensoresMD))]
public partial class TipoSensores
{
}

public class TipoSensoresMD
{        
    [Display(Name = "Nombre")]
    public string nombre { get; set; }
}

当我打电话给

@Html.DisplayNameFor(model => model.nombre)

在Models.TipoSensores视图中它向我显示“Nombre”。没关系。

但是当我打电话时

@Html.DisplayNameFor(model => model.TipoSensores.nombre)

在Models.Sensores视图中,它还会显示标签文本“Nombre” 我想在使用

时更改显示名称
@Html.DisplayNameFor(model => model.TipoSensores.nombre)

到“Nombre del Sensor”但是当我使用

@Html.DisplayNameFor(model => model.nombre)

在Models.TipoSensores视图中它必须显示“Nombre” 所以...我需要两个不同的显示名称,具体取决于调用属性的位置。

2 个答案:

答案 0 :(得分:2)

那是不可能的。显示名称全部或全部。 MVC并不关心如何引用该属性。但是,您可以使用视图模型。从本质上讲,您只需创建一个具有实体中部分或全部属性的类,通常以实体的名称命名为VMViewModel。所以在这种情况下,可能是TipoSensoresViewModel。然后,您可以完全自定义该类的显示名称&#39; nombre属性,并将其用于您的视图而不是您的实体。

唯一缺失的部分是将实体中的数据导入视图模型。您可以手动映射值:

var model = new TipoSensoresViewModel {
    nombre = tipoSensoresInstance.nombre
};

或使用像AutoMapper这样的库。

答案 1 :(得分:1)

如何更改默认名称生成列

@ Html.DisplayNameFor(model =&gt; model.NOMBRE_RED)