【发布时间】:2013-08-16 20:36:14
【问题描述】:
在我的 MVC 应用程序中,我创建了一个助手,它应该从模型中获取一个枚举,然后显示该类型的所有其他可用枚举的单选按钮。
例如,您的枚举 Satus 具有 Active, Inactive, Closed,而页面的模型具有 Status = Status.Active,因此您希望显示 Inactive 和 Closed 的单选按钮。
继续这个例子,MVC 视图调用助手 RadioButtonForEnum:
@Html.RadioButtonForEnum(model => model.Status)
RadioButtonForEnum 然后获取该类型的所有枚举列表并将它们打印为单选按钮;但是,我不确定如何获取传递的枚举以将其从 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());
}
【问题讨论】:
-
旁白:我希望一个名为 RadioButtonForEnum 的方法为枚举中的每个项目创建一个单选按钮,很可能选择当前值。我建议重命名你的方法。
标签: c# asp.net-mvc