枚举的编辑模板与RadioButton无法正常工作

时间:2016-05-09 12:13:47

标签: asp.net-mvc kendo-asp.net-mvc radiobuttonlist

我更新了一个我在网上找到的枚举编辑器来生成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>

0 个答案:

没有答案