c# – 使用[Display(Name =“X”)]和枚举. MVC3 ASP.Net中的自定
发布时间:2020-12-15 04:19:56 所属栏目:百科 来源:网络整理
导读:我使用另一个stackoverflow问题的一段代码: namespace MvcHtmlHelpers{ public static class htmlHelpers { /// summary /// Radio button for : Adapted to support enum labels from display attributes /// /summary /// typeparam name="TModel"/typepa
我使用另一个stackoverflow问题的一段代码:
namespace MvcHtmlHelpers { public static class htmlHelpers { /// <summary> /// Radio button for : Adapted to support enum labels from display attributes /// </summary> /// <typeparam name="TModel"></typeparam> /// <typeparam name="TProperty"></typeparam> /// <param name="htmlHelper"></param> /// <param name="expression"></param> /// <returns></returns> 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="{0}">{1}</label> {2}",id,HttpUtility.HtmlEncode(name),radio ); } return MvcHtmlString.Create(sb.ToString()); } } } 沿着我目前的枚举: public enum Options { [Display(Name ="Yes")] 0,[Display(Name = "No")] 1,[Display(Name = "Other")] 2,} 如果我然后使用@ html.RadioButtonForEnum(…)它显示我的枚举与相应的框选择没有问题.但是,我希望他们使用标签值[Display(Name =“< text>”)],以使它们更有意义!即不仅仅是0,1,2. 解决方法
您可以使用反射来获取值:
public static MvcHtmlString RadioButtonForEnum<TModel,TProperty>( this HtmlHelper<TModel> htmlHelper,TProperty>> expression ) { var metaData = ModelMetadata.FromLambdaExpression(expression,htmlHelper.ViewData); var sb = new StringBuilder(); var enumType = metaData.ModelType; foreach (var field in enumType.GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)) { var value = (int)field.GetValue(null); var name = Enum.GetName(enumType,value); var label = name; foreach (DisplayAttribute currAttr in field.GetCustomAttributes(typeof(DisplayAttribute),true)) { label = currAttr.Name; break; } var id = string.Format( "{0}_{1}_{2}",name ); var radio = htmlHelper.RadioButtonFor(expression,new { id = id }).ToHtmlString(); sb.AppendFormat( "<label for="{0}">{1}</label> {2}",HttpUtility.HtmlEncode(label),radio ); } return MvcHtmlString.Create(sb.ToString()); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |