• net core 使用tagHelper将 enum枚举类型转换为下拉列表select


        [HtmlTargetElement("enums")]
        //[HtmlTargetElement("enums", TagStructure = TagStructure.WithoutEndTag)]
        public class EnumsTagHelper : TagHelper
        {
            [HtmlAttributeName("asp-enum")]
            public Enum Value { get; set; }
    
    
            [HtmlAttributeName("asp-value")]
            public string SelectedValue { get; set; }
    
    
            [HtmlAttributeName("asp-id")]
            public string Id { get; set; }
    
            [HtmlAttributeName("asp-href")]
            public string DataHref { get; set; }
    
    
            [HtmlAttributeName("asp-valuetype")]
            public int ValueIsIndex { get; set; } = 2;
    
            /// <summary>
            /// 将Enum转换为List<SelectListItem>
            /// </summary>
            /// <returns></returns>
            private List<SelectListItem> GetEnumSelectListItem()
            {
                var list = new List<SelectListItem>();
                var typeInfo = Value.GetType().GetTypeInfo();
                var enumValues = typeInfo.GetEnumValues();
    
                foreach (var value in enumValues)
                {
    
                    MemberInfo memberInfo =
                        typeInfo.GetMember(value.ToString()).First();
                    
    
                    var descriptionAttribute =
                        memberInfo.GetCustomAttribute<DescriptionAttribute>();
    
                    list.Add(new SelectListItem()
                    {
                        Text = descriptionAttribute.Description,
                        Value = (ValueIsIndex == 1) ? ((int)value).ToString() : value.ToString()
                    });
    
                    
                }
                return list;
            }
    
            public override void Process(TagHelperContext context, TagHelperOutput output)
            {
                var list = GetEnumSelectListItem();
                // var value = context.AllAttributes["value"]?.Value as string;
                output.TagName = "select";
                output.Attributes.SetAttribute("id", Id);
                output.Attributes.SetAttribute("data-href", DataHref);
                var content = output.GetChildContentAsync();
                output.Content.AppendHtml(content.Result);
                foreach (var item in list)
                {
                    if (item.Value != null)
                    {
                        if (item.Value == SelectedValue)
                        {
                            output.Content.AppendHtml($"<option value='{item.Value}' selected='selected'>{item.Text}</option>");
                        }
                        else
                        {
                            output.Content.AppendHtml($"<option value='{item.Value}'>{item.Text}</option>");
                        }
                    }
                    else
                    {
                        if (item.Text == SelectedValue)
                        {
                            output.Content.AppendHtml($"<option selected='selected'>{item.Text}</option>");
                        }
                        else
                        {
                            output.Content.AppendHtml($"<option>{item.Text}</option>");
                        }
                    }
                }
                //output.Content.AppendHtml("<select/>");
            }
        }

    更多精彩文章请关注我们的微信公众号FocusDotCore

  • 相关阅读:
    lpc2103 rtc寄存器说明
    LPC21O3第一课:第一个实验,LED灯闪烁及ADS1.2的初步使用
    把FlvJoiner更新了一下
    Boost智能指针——weak_ptr
    买了一个USB无线网卡
    Boost的转换函数(二)
    把FlvDownloader更新了一下
    在C#中快速实现拖放操作
    Flv视频分割软件FlvSplitter发布
    用Apatch给Messenger去广告
  • 原文地址:https://www.cnblogs.com/tianfengcc/p/7723491.html
Copyright © 2020-2023  润新知