[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; } = ; /// <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 == ) ? ((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

net core 使用tagHelper将 enum枚举类型转换为下拉列表select的更多相关文章

  1. [小问题笔记(四)] Enum枚举类型转换为DataTable( C# )

    枚举: public enum ProductType { 小产品=, 大产品, 超大产品 } 转换方法: /// <summary> /// 枚举类型转化为DataTable /// & ...

  2. Python中模拟enum枚举类型的5种方法分享

    这篇文章主要介绍了Python中模拟enum枚举类型的5种方法分享,本文直接给出实现代码,需要的朋友可以参考下   以下几种方法来模拟enum:(感觉方法一简单实用) 复制代码代码如下: # way1 ...

  3. enum枚举类型的定义

    enum枚举类型的定义方式与某种用法 #include <iostream> using namespace std; int main() { enum TOT{ zero, one, ...

  4. enum枚举类型的使用

    修饰符为public static enum,不用加final,否则提示错误. 枚举类的所有实例必须在枚举类中显式列出(,分隔,; 结尾).列出的实例系统会自动添加 public static fin ...

  5. C语言--enum,typedef enum 枚举类型详解

    原文:http://z515256164.blog.163.com/blog/static/32443029201192182854300/ 有改动 C语言详解 - 枚举类型 注:以下全部代码的执行环 ...

  6. Java中的Enum枚举类型总结

    废话不多说,直接上代码,该例子来源于:http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html public enum Planet { ...

  7. C# Enum枚举类型操作扩展类

    使用示例: using System.ComponentModel; namespace SchoolEnterpriseManageSys.Enum { /// <summary> // ...

  8. Java enum枚举类型

    java的枚举类型详解: 简单示例: public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 复杂示例(带自定义构造方法与类型) public enum En ...

  9. C++ enum 枚举类型

    1. 枚举类型浅谈 假设我们要设计一个打开文件的函数, 打开文件由三种状态: input, output 和 append. 不使用枚举, 我们可能会写出如下的代码 const int input = ...

随机推荐

  1. Mysql 协议嗅探

    需求 监听通过网卡的所有mysql流量,进行解析,可在不影响现有业务情况下,进行入侵检测(IDS)或数据集成 协议要点 起初发现 用mysql-front访问数据库和mysql 的客户端访问时数据包格 ...

  2. HDU3605 Escape

    思想:缩点+sap Max,t还可以缩小,优化,高数课写的,有点丑,暂时懒得改. #include<cstdio> #include<cstdlib> #include< ...

  3. Hibernate 学习笔记 - 1

    一.Hibernate 的环境搭建.配置及 HelloWorld 1.在 Eclipse 中搭建 Hibernate 环境 下载 Hibernate 离线 jar 包(jbosstools-4.4.4 ...

  4. RoportNG报表显示中文乱码和TestNG显示中文乱码实力解决办法

    最近在进军测试自动化框架学习阶段,但无意间总是会伴随小问题的困扰,比如中文乱码,而导致显示总是不舒服,个人觉得,就一定要解决,似乎有点点强迫症.所以遇到RoportNG报表显示中文乱码和TestNG显 ...

  5. Android Annotations(2)

    AndroidAnnotations是一个开源框架,旨在加快Android开发的效率.通过使用它开放出来的注解api,你几乎可以使用在任何地方, 大大的减少了无关痛痒的代码量,让开发者能够抽身其外,有 ...

  6. win10 uwp 获得缩略图

    有时候需要获得文件或视频的缩略图. 本文提供两个方法,用于获得文件的缩略图和截取视频指定时间的显示图片. 文件缩略图 如果有一个文件需要获得缩略图,可以使用 GetThumbnailAsync 或 G ...

  7. UWP 绘制图形

    UWP图形和wpf变化不多 一般用到有椭圆.长方形.多边形.线 不过如果用的好,可以做出很漂亮的界面 一般使用画图都是使用Shape 类,Shape 类具有一个与其关联的画笔并可以呈现到屏幕,包括 L ...

  8. win10 uwp 使用油墨输入

    win10可以很简单在我们的app使用自然输入,这篇文章主要翻译https://blogs.windows.com/buildingapps/2015/09/08/going-beyond-keybo ...

  9. asp.net core2.0网站的环境搭建和网站部署

    使用到的软件和硬件 1.       centos7.3服务器一台 2.       xshell.xftp 3.       vs2017 4.       .NET Core   1. 安装 li ...

  10. LVS原理讲解

    一.lvs介绍 LVS的英文全名为"Linux Virtual Server",即Linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身 ...