[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. Weave Scope 容器地图 - 每天5分钟玩转 Docker 容器技术(80)

    Weave Scope 的最大特点是会自动生成一张 Docker 容器地图,让我们能够直观地理解.监控和控制容器.千言万语不及一张图,先感受一下. 下面开始实践 Weave Scope. 安装 执行如 ...

  2. thrift例子:python客户端/java服务端

    java服务端的代码请看上文. 1.说明: 这两篇文章其实解决的问题是,当使用python去访问大数据线上集群的时候,遇到两个问题: 1)python-hadoop和python-hive相关包链接不 ...

  3. Oracle RAC + ASM + Grid安装

    (一)环境准备 主机操作系统 windows10 虚拟机平台 vmware workstation 12 虚拟机操作系统 redhat 5.5 x86(32位) :Linux.5.5.for.x86. ...

  4. win10 uwp 右击选择 GridViewItem

    有时候我们需要选择一个 GridView 的一项,通过我们右击. 于是我们需要在 GridView 的 SelectionMode 为 Single ,IsRightTapEnabled 为True ...

  5. toString方法的用处

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Consolas; color: #a5b2b9 } p.p1 { margin: 0.0px ...

  6. 12.21-Android ServerSocket

    建立ServerSocket服务器 1.new ServerSocket对象servierSocket 2.接收客户端请求Socket client = servierSocket.accept(); ...

  7. MongoDB正则表达式

    MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式. 1. 搜索包含某关键字的内容: db.posts.find({post_text:{$regex:"w3cschoo ...

  8. LeetCode 34. Search for a Range (找到一个范围)

    Given an array of integers sorted in ascending order, find the starting and ending position of a giv ...

  9. 浅析C#中单点登录的原理和使用

    什么是单点登录?我想肯定有一部分人"望文生义"的认为一个用户只能在一处登录.其实这是错误的理解(我记得我第一次也是这么理解的).单点登录指的是多个子系统只需要登录一个,其他系统不需 ...

  10. 一、JAVA环境变量配置详解——JavaWeb点滴

    JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLASSPATH.PATH. JAVA_HOME 指向 ...