【发布时间】:2011-07-21 15:20:45
【问题描述】:
在创建组合在一起的单选按钮列表时遇到问题,特别是在 MVC 3 中,但这也适用于 MVC 2。
当使用 Html 帮助程序生成单选按钮并且模型是数组的一部分时,就会出现问题。
这是我的代码的精简版。
public class CollectionOfStuff {
public MVCModel[] Things { get; set }
}
/*This model is larger and represents a Person*/
public class MVCModel {
[UIHint("Hidden")]
public string Id { get; set; }
public string Name { get; set; }
public bool IsSelected { get; set; }
}
/*Assigned to new CollectionOfStuff property Things*/
var items = new[] {
new MVCModel() { Id="0" Name = "Name here" }, new MVCModel() { Id="1" Name = "Name there" }
}
我的父母视图
@model CollectionOfStuff
@for (int i = 0; i < Model.Things.Length; i++) {
@Html.EditorFor(m => m.Things[i]);
}
我的视图呈现单个 MVCModel 对象
@Model MVCModel
@{
var attr = new {
Checked = Model.IsSelected ? "checked=checked" : ""
};
}
@Html.RadioButtonFor(model => model, Model.Id, attr)
产生这个输出:
<input type="radio" value="0" name="MVCModel[0]" id="MVCModel_0_" data-val-required="You need to choose" data-val="true" />
<input type="radio" value="1" name="MVCModel[1]" id="MVCModel_1_" data-val-required="You need to choose" data-val="true" />
单选按钮没有分组,但它具有写出元数据以进行验证的明显优势。
另一种方法是调用:
@Html.RadioButton(name: "GroupName", value: Model.Id, isChecked: Model.IsSelected)
生产:
<input type="radio" value="0" name="MVCModel[0].GroupName" id="MVCModel_0__GroupName">
<input type="radio" value="1" name="MVCModel[1].GroupName" id="MVCModel_1__GroupName">
同样,这不会产生预期的结果。它还缺少验证元数据。
另一种选择是创建自定义模板,但这种方法的问题是验证所需的所有元数据都不存在。
关于如何创建分组单选按钮或获取元数据以便我自己创建模板的任何想法?
【问题讨论】: