有条件地更改[Display(Name =“”)]属性

时间:2015-07-14 07:41:39

标签: c# asp.net-mvc-5

我有一个简单的要求,但无法理解如何实现这一目标。我在View Model中有这些属性。

public class Feedback
{       
    [Required]
    [Display(Name = "Current ID")]
    public int? PreviousID { get; set; }

    [Required]
    [Display(Name = "Next ID")]
    public int? NextID { get; set; }

    [Required]
    public int ScenarioID { get; set; }

    [Display(Name = "Select you scenario")]
    public IEnumerable<SelectListItem> YourScenario { get; set; }
}

现在我的观点,

<div class="form-group">
   @Html.LabelFor(m => m.YourScenario, new { @class = "col-sm-3 control-label" })
   <div class="col-sm-9">
       @Html.DropDownListFor(m => m.ScenarioID, m.YourScenario, "Choose Scenario", new { @class = "form-control chosen-select" })
   </div>
</div>

<div class="form-group">
   @Html.LabelFor(m => m.PreviousID, new { @class = "col-sm-3 control-label" })
   <div class="col-sm-9">
       @Html.TextBoxFor(m => m.PreviousID)
   </div>
</div>

<div class="form-group" style="display:none">
   @Html.LabelFor(m => m.NextID, new { @class = "col-sm-3 control-label" })
   <div class="col-sm-9">
       @Html.TextBoxFor(m => m.NextID)
   </div>
</div>

在视图上可以看到只显示PreviousID和场景的DropDownList。使用JQuery我根据DropDownList的一些特定值显示并隐藏了NextID的div。因此,如果用户从下拉列表中选择“Scenario 3”,则会显示InputID for NextID。

解释了所有这些我想要的是根据所选的下拉列表值更改PreviousID的显示名称。因此,如果用户选择“场景1”和“场景2”,则PreviousID的显示名称应为“当前ID”,如果用户选择“场景3”,则显示名称应为“上一个ID”。此更改也应反映在验证摘要中。亲切地告诉我如何实现这个目标?非常感谢

1 个答案:

答案 0 :(得分:1)

我有两个想法:

1)

您可以删除第[Display(Name = "Current ID")]行。然后你需要使用Label(“SomeName”)而不是LabelFor。 然后创建一个类似DropDownList_SelectionChanged的事件,然后更改标签的名称。

2)

或者您添加成员DisplayName并绑定到它:

public class Feedback
{       
    [Required]
    public int? PreviousID { get; set; }

    [Required]
    [Display(Name = "Next ID")]
    public int? NextID { get; set; }

    [Required]
    public int ScenarioID { get; set; }

    [Display(Name = "Select you scenario")]
    public IEnumerable<SelectListItem> YourScenario { get; set; }

    public String DisplayName {
        get 
        { 
            String name = "";
            if (ScenarioID == 1) {
                name = "SomeName";
            } else {
                name = "otherName";
            }

            return name;
        }
    }
}

在您看来:

@Html.Label({Binding Content=m,Path=DisplayName}

这可能不完全正确,因为我无法测试你的项目,但我希望你明白这个想法。请告诉我你的尝试。