私は現在、人がログインして作業を 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>
}
助けてください !!!