我正在使用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)
{
<p>
<b> @Html.LabelFor(model => model.testObd.Catalyst, @DTResource.resNMHCCatalyst) </b>
@Html.DisplayFor(model => model.testObd.Catalyst)
</p>
}
else
{
<p>
<b> @Html.LabelFor(model => model.testObd.Catalyst, @DTResource.resCatalyst) </b>
@Html.DisplayFor(model => model.testObd.Catalyst)
</p>
}
但我正在回应业务规则,我认为它应该在模型中,而不是视图中。有没有办法将这个逻辑移到模型中?感谢您的任何想法/见解。
答案 0 :(得分:5)
使其成为模型的只读属性,其返回值由其他属性决定:
注意:有关您的代码的假设如下。根据需要重新设置:
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;
}
}
}
然后你的观点(正确地)成为一个观点......而不是决策者:
<b> @Html.LabelFor(model => model.testObd.Catalyst, Model.CatalystLabelText) </b>