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. 【开源项目推荐】Great Expectations—开源的数据质量工具

    大家好,我是独孤风. 又到了本周的开源项目推荐.数据质量是企业进行数据治理非常重要的一个环节,高质量的数据对管理决策,业务支撑都有非常重要的作用. 只有持续的数据质量改进才能推动数据治理体系的完善,差 ...

  2. 建议收藏备查!MySQL 常见错误代码说明

    先给大家看几个实例的错误分析与解决方案. 1.ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data ...

  3. 前端布局flex从入门到入土

    前端布局flex从入门到入土 作为一个后端,谈不上多会前端,但是一些常见的布局都可以做到,例如flex布局.推荐菜鸟教程的布局:https://www.runoob.com/w3cnote/flex- ...

  4. cookie和session的一些疑惑以及ai解答

    我: 那么当浏览器关闭的时候,当再次访问这个地址的时候,为什么之前设置的cookie没有被删除掉?而且按照你说的这次可能会生成一个新的sessionID,那么cookie里面的其他数据,它是如何获取上 ...

  5. 打造 VSCode 高效 C++ 开发环境的必备插件

    工欲善其事,必先利其器 C++ clangd:代码补全.跳转.clang-tidy 检查,自带 clang-format CodeLLDB:LLVM 的调试器(类比 GDB) CMake CMake ...

  6. 启动多个redis进程

    启动时指定端口 启动时指定端口可在一台服务器启动多个redis进程 cd /opt/work/redis/bin./redis-server ../conf/redis.conf --port 638 ...

  7. C++篇:第十三章_异常_知识点大全

    C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 十三.异常 ① 函数指针与该指针所指的函数必须具有一致的noexcept异常说明 ...

  8. 三大基础方案和AI出海计划重磅发布!加速盘古大模型生态发展

    本文分享自华为云社区<三大基础方案和AI出海计划重磅发布!加速盘古大模型生态发展>,作者: 华为云头条. 近日,以"开放同飞,共赢行业AI新时代"为主题的华为云盘古大模 ...

  9. 【小白学YOLO】YOLOv3网络结构细致解析

    摘要:本文将详细介绍Yolov3的网络结构相关内容. Yolov3 网络结构 在博客"Yolo发展历史及网络结构"中我们已经详细的解释了Yolov1的网络结构,并简要的提到了Yol ...

  10. 资源成本降低70%!华为MetaERP资产核算的Serverless架构实践

    本文分享自华为云社区<资源成本降低70%!华为MetaERP资产核算的Serverless架构实践>,作者: 华为云PaaS服务小智. 资产核算是指在一定的财务周期,对企业拥有的房屋建筑物 ...