【问题标题】:Change display name for foreign attribute更改外部属性的显示名称
【发布时间】:2014-06-26 18:45:56
【问题描述】:

我有两张这样结构的表,这是实体框架数据模型:

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” 所以...我需要两个不同的显示名称,具体取决于调用属性的位置。

【问题讨论】:

  • 我不认为内置的显示名称功能支持这一点。您可能需要直接将其放入标记中。

标签: c# asp.net-mvc


【解决方案1】:

这是不可能的。显示名称是全部或全部。 MVC 不关心该属性是如何被引用的。但是,您可以做的是使用视图模型。本质上,您只需创建一个具有实体的部分或全部属性的类,通常以实体命名,并在末尾添加 VMViewModel 之类的内容。所以在这种情况下,可能是TipoSensoresViewModel。然后,您可以完全自定义该类的 nombre 属性的显示名称,并将其用于您的视图而不是您的实体。

唯一缺少的部分是将数据从实体获取到您的视图模型中。您可以手动映射该值:

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

或者使用像AutoMapper这样的库。

【讨论】:

    【解决方案2】:

    如何更改默认名称生成列

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 2012-01-18
      • 2017-06-24
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      相关资源
      最近更新 更多