我有一个简单的要求,但无法理解如何实现这一目标。我在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”。此更改也应反映在验证摘要中。亲切地告诉我如何实现这个目标?非常感谢
答案 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}
这可能不完全正确,因为我无法测试你的项目,但我希望你明白这个想法。请告诉我你的尝试。