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

时间:2014-01-15 05:00:45

标签: c# asp.net-mvc entity-framework asp.net-mvc-4

我正在使用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>
            }

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

1 个答案:

答案 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>