我更新了一个我在网上找到的枚举编辑器来生成kendo无线电控件而不是常规,但第一个单选按钮是使用正确的属性生成的,其余的是错误的,在运行时,整个单选按钮组都不可点击
以下是编辑器的.cshtml:
@model Enum
@{
Func<Enum, string> getDescription = en =>
{
Type type = en.GetType();
System.Reflection.MemberInfo[] memInfo = type.GetMember(en.ToString());
if (memInfo != null && memInfo.Length > 0)
{
object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.DisplayAttribute), false);
if (attrs != null && attrs.Length > 0)
{
return ((System.ComponentModel.DataAnnotations.DisplayAttribute)attrs[0]).GetName();
}
}
return en.ToString();
};
var listItems = Enum.GetValues(Model.GetType()).OfType<Enum>().Select(e =>
new SelectListItem()
{
Text = getDescription(e),
Value = e.ToString(),
Selected = e.Equals(Model)
});
string prefix = ViewData.TemplateInfo.HtmlFieldPrefix;
int index = 0;
ViewData.TemplateInfo.HtmlFieldPrefix = string.Empty;
foreach (var li in listItems)
{
string fieldName = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}_{1}", prefix, index++);
<div >
@(Html.Kendo().RadioButton()
.Label(li.Text)
.Name(prefix)
.Value(li.Value)
.Checked(li.Selected)
.HtmlAttributes(new { @id = fieldName })
)
@*
This works properly
@Html.RadioButton(prefix, li.Value, li.Selected, new { @id = fieldName, @class = "k-radio" })
@Html.Label(fieldName, li.Text, new { @class = "k-radio-label" })
*@
</div>
}
ViewData.TemplateInfo.HtmlFieldPrefix = prefix;
}
以下是表格上的第一个电台:
<div>
<input name="StaffType" class="k-radio k-radio" id="StaffType_0" type="radio" checked="checked" value="DACStaff" data-val-required="The StaffTypeEnum field is required." data-val="true">
<label class="k-radio-label" for="StaffType_0_DACStaff">DAC Staff</label>
</div>
以下是下一个:
<div>
<input name="StaffType" class="k-radio k-radio" id="StaffType_1" type="radio" value="AirportStaff">
<label class="k-radio-label" for="StaffType_1_AirportStaff">Airport Staff</label>
</div>
我看到类标记k-radio
被应用了两次,除了第一个元素有data- *属性,但第二个单选按钮以后,生成的代码缺少属性。
有人可以指出生成的代码无法正常运行的原因吗?
用法:
<div class="form-group">
@Html.LabelFor(m => m.StaffType, new { @class = "col-sm-3 control-label" })
<div class="col-sm-6">
@Html.EditorFor(m => m.StaffType, "RadioButtonListEnum")
</div>
</div>