我正在使用 Entity Framework ,MVC。如何在一个数据字段的两个标签之间动态更改(基于从同一车辆的另一个数据库检索的数据)?理想情况下,我希望我的模型类中包含类似这样的内容(这是伪代码,预计不会编译):
[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>
}
但我正在响应业务规则,我真的认为它应该在模型中,而不是在 View 中。有什么方法可以将此逻辑移动到模型中吗?感谢您的任何想法/见解。
最佳答案
将其设置为模型的只读属性,其返回值由其他属性决定:
注意:以下是关于您的代码的假设。根据需要重新调整:
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>
关于c# - 在 mvc ef 中动态选择显示名称的两个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21129447/