【问题标题】:dynamically choose between two labels for the Display Name in mvc ef在 mvc ef 中为显示名称动态选择两个标签
【发布时间】:2014-02-03 10:49:48
【问题描述】:

我正在使用实体框架,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>
            }

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

【问题讨论】:

  • 我建议你创建一个 ViewModel 类来实现你需要的行为。然后在您的视图中引用它。

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


【解决方案1】:

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

注意:关于您的代码的假设如下。根据需要重新调整它:

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>

【讨论】:

  • 太好了!因为 FuelType 和 VehicleYear 在另一个模型类中,并且来自另一个数据库,所以我将使用包含指向它们的指针的类。该概念将是您在此处列出的内容。视图中有逻辑真的让我很烦。
  • 很高兴我能帮上忙。当您在视图中有逻辑时,通常使用 MVC(通常 == 始终)..您的设计存在根本性错误。你问这种事情真好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2016-07-15
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
相关资源
最近更新 更多