在mvc ef中为显示名称动态选择两个标签

我正在使用Entity Framework,MVC。 如何在一个数据字段的两个标签之间动态更改(基于从另一个数据库检索的有关同一车辆的数据)? 理想情况下,我希望我的Model类中有这样的东西(这是伪代码,不希望编译):

[Display(Name = "resCatalyst", ResourceType = typeof(VehiclesModelResource))] public string Catalyst { get; set; } ... public void SetElementDisplayName(bool DieselOlderThan2009) { if (DieselOlderThan2009) { Catalyst.SetDisplayName(Name = "resNMHCCatalyst", ResourceType = typeof(VehiclesModelResource)); } else { Catalyst.SetDisplayName(Name = "resCatalyst", ResourceType = typeof(VehiclesModelResource)); } } 

我确实想过改变cshtml文件中的标签,如下所示:

 @if(Model.vltDataOne.FuelType == "D" && Model.vltDataOne.VehicleYear >= 2009) { 

@Html.LabelFor(model => model.testObd.Catalyst, @DTResource.resNMHCCatalyst) @Html.DisplayFor(model => model.testObd.Catalyst)

} else {

@Html.LabelFor(model => model.testObd.Catalyst, @DTResource.resCatalyst) @Html.DisplayFor(model => model.testObd.Catalyst)

}

但我正在回应业务规则,我认为它应该在模型中,而不是视图中。 有没有办法将这个逻辑移到模型中? 感谢您的任何想法/见解。

使其成为模型的只读属性,其返回值由其他属性决定:

注意:有关您的代码的假设如下。 根据需要重新设置:

 public class YourModel { public string FuelType { get; set; } public int VehicleYear { get; set; } public string CatalystLabelText { get { return (this.FuelType == "D" && this.VehicleYear >= 2009) ? _resNMHCCatalyst : _resCatalyst; } } } 

然后你的观点(正确地)成为一个观点..而不是决策者:

  @Html.LabelFor(model => model.testObd.Catalyst, Model.CatalystLabelText)