私の MVC アプリケーションでは、モデルから列挙型を取得し、その型の他のすべての使用可能な列挙型のラジオ ボタンを表示するヘルパーを作成しました。
たとえば、 enum Satus がありActive, Inactive, Closed
、ページのモデルが持つため、およびのStatus = Status.Active
ラジオ ボタンを表示したいとします。Inactive
Closed
この例を進めると、MVC ビューはヘルパー RadioButtonForEnum を呼び出します。
@Html.RadioButtonForEnum(model => model.Status)
RadioButtonForEnum は、そのタイプのすべての Enum のリストを取得し、それらをラジオ ボタンとして出力します。ただし、それを除外するために渡された列挙型に到達する方法がわかりませんnames
public static MvcHtmlString RadioButtonForEnum<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var names = Enum.GetNames(metaData.ModelType);
var sb = new StringBuilder();
foreach (var name in names)
{
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=\"{1}\">{0}{2}</label>", radio, id, HttpUtility.HtmlEncode(StringHelpers.PascalCaseToSpaces(name)));
}
return MvcHtmlString.Create(sb.ToString());
}