1、根据List集合生成Select标签,根据数据库数据换成SelectListItem集合

Action 方法(也可使用下方的List集合的扩展方法):

1 var selectList = DBList.Select(f => new SelectListItem { Value = f.Key, Text = f.Value }).ToList();
2 selectList.Insert(0, new SelectListItem() { Value = "-1", Text = "请选择" });
3 ViewData["selectList"] = selectList;

View视图:

1 @Html.DropDownListFor(m => m.HandleBy, ViewData["selectList"] as IEnumerable<SelectListItem>, new { @class = "form-control selectWidth" })

2、根据枚举扩展方法生成Select标签

View视图:

@Html.DropDownList("ContractStyle", new Model.Enums.ContractStyleType().ToSelectList(), "全部", new { @class = "form-control" })

扩展方法:

  1     public static class SelectListExtension
2 {
3 public static IEnumerable<SelectListItem> CreateRangeSelect(int nimNumber, int maxNumber, string formatter = null)
4 {
5 for (int i = nimNumber; i <= maxNumber; i++)
6 yield return new SelectListItem { Value = i.ToString(formatter), Text = i.ToString(formatter) };
7 }
8
9 public static IEnumerable<SelectListItem> ToSelectListItem(this Dictionary<int, string> items, string defaultValue = null)
10 {
11 if (!string.IsNullOrWhiteSpace(defaultValue))
12 yield return new SelectListItem { Value = "", Text = defaultValue };
13
14 foreach (var item in items)
15 yield return new SelectListItem { Value = item.Key.ToString(), Text = item.Value };
16 }
17
18 public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
19 where TEnum : struct, IComparable, IFormattable, IConvertible
20 {
21 var values = from TEnum e in Enum.GetValues(typeof(TEnum))
22 select new { Id = Convert.ToInt32(e), Name = GetEnumDescription(e) };
23 return new SelectList(values, "Id", "Name");
24 }
25
26 /// <summary>将枚举类型转化为SelectListItem列表
27 /// </summary>
28 /// <typeparam name="TEnum"></typeparam>
29 /// <param name="enumObject">The enum object.</param>
30 /// <param name="firstItemText">The first item text.</param>
31 /// <param name="selectedId">The selected identifier.</param>
32 /// <returns></returns>
33 public static List<SelectListItem> EnumToSelectListItems<TEnum>(string firstItemText = null, int selectedId = -1)
34 {
35 var selectList = new List<SelectListItem>();
36
37 if (!string.IsNullOrEmpty(firstItemText))
38 {
39 selectList.Add(new SelectListItem()
40 {
41 Value = "-1",
42 Text = firstItemText,
43 Selected = selectedId == -1
44 });
45 }
46 selectList.AddRange(from TEnum e in Enum.GetValues(typeof(TEnum))
47 select new SelectListItem
48 {
49 Value = Convert.ToInt32(e).ToString(),
50 Text = GetEnumDescription(e),
51 Selected = Convert.ToInt32(e) == selectedId
52 });
53
54 return selectList;
55 }
56 public static List<SelectListItem> ToSelectListByFieldType<TEnum>(FieldTypeEnum? fieldType = null, string firstItemText = null, string firstItemValue = null, int selectedId = -1)
57 where TEnum : struct, IComparable, IFormattable, IConvertible
58 {
59 var selectList = new List<SelectListItem>();
60
61 if (!string.IsNullOrEmpty(firstItemText))
62 {
63 selectList.Add(new SelectListItem()
64 {
65 Value = firstItemValue,
66 Text = firstItemText,
67 Selected = selectedId == -1
68 });
69 }
70 if (fieldType.HasValue)//指定枚举字段类型,只返回特定类型列表
71 {
72 foreach (TEnum e in Enum.GetValues(typeof(TEnum)))
73 {
74 FieldInfo fi = e.GetType().GetField(e.ToString());
75 EnumValueFieldTypeAttribute[] fieldTypeAttributes = (EnumValueFieldTypeAttribute[])fi.GetCustomAttributes(typeof(EnumValueFieldTypeAttribute), false);
76 if (fieldTypeAttributes == null || fieldTypeAttributes.Length == 0 || fieldTypeAttributes[0].FieldType != fieldType) continue;
77 var item = new SelectListItem
78 {
79 Value = Convert.ToInt32(e).ToString(),
80 Selected = Convert.ToInt32(e) == selectedId
81 };
82 DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
83 if ((attributes != null) && (attributes.Length > 0))
84 item.Text = attributes[0].Description;
85 else
86 item.Text = e.ToString();
87 selectList.Add(item);
88 }
89 }
90 else//不指定枚举字段类型,显示全部
91 {
92 selectList.AddRange(from TEnum e in Enum.GetValues(typeof(TEnum))
93 select new SelectListItem
94 {
95 Value = Convert.ToInt32(e).ToString(),
96 Text = GetEnumDescription(e),
97 Selected = Convert.ToInt32(e) == selectedId
98 });
99 }
100 return selectList;
101 }
102 public static string GetEnumDescription<TEnum>(TEnum value)
103 {
104 FieldInfo fi = value.GetType().GetField(value.ToString());
105
106 DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
107
108 if ((attributes != null) && (attributes.Length > 0))
109 return attributes[0].Description;
110 else
111 return value.ToString();
112 }
113
114 /// <summary>将list转换成SelectListItem列表
115 /// </summary>
116 /// <typeparam name="T"></typeparam>
117 /// <param name="list">列表数据</param>
118 /// <param name="firstItemText">第一个下拉框名称(未空则不额外添加)</param>
119 /// <param name="selectedId">已选项id</param>
120 public static IEnumerable<SelectListItem> ListToSelectListItems<T>(this IEnumerable<T> list, string firstItemText, int selectedId = -1)
121 {
122 if (list == null)
123 {
124 return new List<SelectListItem>();
125 }
126 var t = typeof(T);
127 List<SelectListItem> selectList = new List<SelectListItem>();
128 if (!string.IsNullOrEmpty(firstItemText))
129 {
130 selectList.Add(new SelectListItem()
131 {
132 Value = "-1",
133 Text = firstItemText,
134 Selected = selectedId == -1
135 });
136 }
137 foreach (var item in list)
138 {
139 var addItem = new SelectListItem();
140 foreach (var p in t.GetProperties())
141 {
142 //id(约定为int类型)
143 if (p.PropertyType == typeof(System.Int32))
144 {
145 addItem.Value = p.GetValue(item).ToString();
146 }
147 else
148 {//value
149 addItem.Text = p.GetValue(item).ToString();
150 }
151 addItem.Selected = addItem.Value.Equals(selectedId);
152 }
153 selectList.Add(addItem);
154 }
155 return selectList;
156 }
157
158
159 }

欢迎关注公众号:DotNet软件编程IT技术

Razor 语法@Html.DropDownList,根据List集合或者枚举生成Select标签的更多相关文章

  1. 知识点2-5:了解Razor语法

    以往开发ASP.NET Web Form时,在ASPX页面上都会出现许多夹杂C#/VB.NET与HTML的情况,而先前使用<%...%>这种传统圆角括号的表示法会让HTML标签与ASP.N ...

  2. 5.3 Razor语法基础

    以往开发ASP.NET Web Form时,在ASPX页面上都会出现许多夹杂C#/VB.NET与HTML的情况,而先前使用<%...%>这种传统圆角括号的表示法会让HTML标签与ASP.N ...

  3. ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考

    原文:Razor Syntax Reference 作者:Taylor Mullen.Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:何镇汐 什么是 Razor? Razor 是一 ...

  4. [ASP.NET MVC 小牛之路]03 - Razor语法

    本人博客已转移至:http://www.exblr.com/liam  Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指 ...

  5. MVC Razor语法

    Razor语法, 视图引擎 Razor(CSHTML) @ 可以编写一条C#语句@{} 可以编写一组C#语句,也有可能嵌着Html@: 将文字内容直接输出到页面上去@() 在一句中将一段C#代码包括起 ...

  6. Razor语法&ActionResult&MVC

    Razor代码复用 mvc 4 razor语法讲解和使用 了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult 了解ASP.NE ...

  7. ASP.NET MVC Razor语法

    ASP.NET MVC Razor语法 (一) 关于_ViewStart.cshtml文件     使用Razor模板引擎的话,会自动生成一个_ViewStart.cshtml文件.事实上,_View ...

  8. ASP.NET MVC中的Razor语法

    1.Razor的基本语法 @* 多行代码时需要包含在大括号内{}和每句代码后都需要加分号; *@ @{ ViewBag.Title = "Index"; ViewBag.Name ...

  9. ASP.NET使用Razor语法无法正确识别.cshtml文件

    ASP.NET使用WebPage编程的好处之一是可以使用强大的Razor语法, 但初次使用Razor语法会碰到一个比较头疼的问题就是无法直接写一个.cshtml让浏览器去识别,查资料也没有找到相关问题 ...

  10. mvc 4 razor语法讲解和使用

    1.这里的  @{Layout="文件路径";}  代码块指定了整个项目默认所使用的布局文件(如图:) @RenderBody()对于所有的页面默认的情况下都会使用这个布局(Web ...

随机推荐

  1. 云上攻防--云服务&&对象存储(域名接管)&&弹性计算(元数据泄露)

    云上攻防--云服务&&对象存储(域名接管)&&弹性计算(元数据泄露) 对象存储 各个厂商对于对象存储的叫法不同,但是除了叫法基本没有其他区别. 对象存储各大云名词: 阿 ...

  2. javacv实现屏幕录制(一)

    javacv实现屏幕录制(一) javacv从入门到入土系列,发现了个好玩的东西,视频处理,于是我想搞个屏幕录屏,我百度了一下,copy那些代码我没有实现过,那些代码也没有说明,只好去官网看文档找资料 ...

  3. Android 蓝牙使用

    原文地址: Android 蓝牙使用 - Stars-One的杂货小窝 公司项目需求需要实现监听蓝牙耳机连接,且要获取蓝牙耳机电量功能,翻了不少官方文档,记录下技术调研代码 注:本文没有研究蓝牙配对功 ...

  4. 2023-11-29:用go语言,给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。 需保证 返回结果的字典序最小。 要求不能打乱其他字符的相对位置)。 输入:s = “cba

    2023-11-29:用go语言,给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次. 需保证 返回结果的字典序最小. 要求不能打乱其他字符的相对位置). 输入:s = &quo ...

  5. 想学AI开发很简单:只要你会复制粘贴

    摘要:本次实践基于 mobilenetV2 实现猫狗图像分类,贯穿了数据集获取及处理.预训练模型微调及迁移.端侧部署及推理等环节和知识点,体会到了 MindSpore 简单的开发体验和全场景快速部署的 ...

  6. 如何处理分析Flink作业反压的问题?

    摘要:反压是 Flink 应用运维中常见的问题,它不仅意味着性能瓶颈还可能导致作业的不稳定性. 反压(backpressure)是实时计算应用开发中,特别是流式计算中,十分常见的问题.反压意味着数据管 ...

  7. 4问教你搞定java中的ThreadLocal

    摘要:ThreadLocal是除了加锁同步方式之外的一种保证规避多线程访问出现线程不安全的方法. 本文分享自华为云社区<4问搞定java中的ThreadLocal>,作者:breakDra ...

  8. Linux如何进行GPIO读写操作的?

    摘要:本文介绍GPIO的读写,介绍基本原理,以及不同读写方式的性能. 本文分享自华为云社区<Linux 基于sysfs的GPIO读写操作>,作者:一颗小树x . 前言 最近接触到Linux ...

  9. -bash: /home/advert/bin/vim: No such file or directory

    今天advert用户使用vim时,突然报错 -bash: /home/advert/bin/vim: No such file or directory 之前还好好的,且其他用户都能用vim,查看也是 ...

  10. 解决Github中使用Octotree时,出现 Error: API limit exceeded 报错 或者 Error: Connection error报错的问题(详细操作)

    对于科研工作者来说,Github 是不可多得的利器,那么Octotree 插件的使用将会让用户在使用 Github 时拥有更好的体验,提高学习工作的效率.但是笔者在使用的过程中遇到以下这样的问题,下面 ...