1

私は現在、人がログインして作業を Darft として保存できるプロジェクトに取り組んでいます。列挙型を以下のラジオ ボタンに変換する拡張機能があります。これは挿入モードでは正常に機能しますが、データベースから既存のレコードを開くと、保存された作業が事前入力されません。

public static MvcHtmlString RadioButtonForEnum<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression, object htmlAttributes, string nullLabel
)
    {
        var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        Type enumType = GetNonNullableModelType(htmlHelper.ViewData.ModelMetadata, metaData);
        var names = Enum.GetValues(enumType).Cast<TProperty>();
        var sb = new StringBuilder();
        foreach (var name in names)
        {

            var description = GetEnumDescription(name).SplitCamelCase();

            var id = string.Format(
                "{0}_{1}_{2}",
                htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix,
                metaData.PropertyName,
                name
            );

            var radio = htmlHelper.RadioButtonFor(expression, name, new { id = id }).ToHtmlString();
            sb.AppendFormat(
                "<label for=\"{0}\">{2}{1}</label> ",
                id,
                HttpUtility.HtmlEncode(description),
                radio
            );
        }
        return MvcHtmlString.Create(sb.ToString());
    }

私のビューモデルは次のようになります

public class TestModel
{
    public int Id { get; set; }

    [UIHint("EnumRadio")]
    public Question1Enum? Question1 { get; set; }
    [UIHint("EnumRadio")]
    public Question2Enum? Question2 { get; set; }
    [UIHint("EnumRadio")]
    public Question3Enum? Question3 { get; set; }
}

私の列挙型は以下です

public enum Question1Enum
{
    [Description("20yrs")]
    Option1,
    [Description("5yrs")]
    Option2
}

私のエディタテンプレートは以下です

@model Object
@using (Html.BootstrapControlGroupFor(x => Model))
{
<br />
<div class="controls">
    @Html.RadioButtonForEnum(x => Model)
    @Html.ValidationMessageFor(model => Model)
</div>
}

助けてください !!!

4

0 に答える 0