Razor 语法@Html.DropDownList,根据List集合或者枚举生成Select标签
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标签的更多相关文章
- 知识点2-5:了解Razor语法
以往开发ASP.NET Web Form时,在ASPX页面上都会出现许多夹杂C#/VB.NET与HTML的情况,而先前使用<%...%>这种传统圆角括号的表示法会让HTML标签与ASP.N ...
- 5.3 Razor语法基础
以往开发ASP.NET Web Form时,在ASPX页面上都会出现许多夹杂C#/VB.NET与HTML的情况,而先前使用<%...%>这种传统圆角括号的表示法会让HTML标签与ASP.N ...
- ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考
原文:Razor Syntax Reference 作者:Taylor Mullen.Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:何镇汐 什么是 Razor? Razor 是一 ...
- [ASP.NET MVC 小牛之路]03 - Razor语法
本人博客已转移至:http://www.exblr.com/liam Razor是MVC3中才有的新的视图引擎.我们知道,在ASP.NET中,ASPX的视图引擎依靠<%和%>来调用C#指 ...
- MVC Razor语法
Razor语法, 视图引擎 Razor(CSHTML) @ 可以编写一条C#语句@{} 可以编写一组C#语句,也有可能嵌着Html@: 将文字内容直接输出到页面上去@() 在一句中将一段C#代码包括起 ...
- Razor语法&ActionResult&MVC
Razor代码复用 mvc 4 razor语法讲解和使用 了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult 了解ASP.NE ...
- ASP.NET MVC Razor语法
ASP.NET MVC Razor语法 (一) 关于_ViewStart.cshtml文件 使用Razor模板引擎的话,会自动生成一个_ViewStart.cshtml文件.事实上,_View ...
- ASP.NET MVC中的Razor语法
1.Razor的基本语法 @* 多行代码时需要包含在大括号内{}和每句代码后都需要加分号; *@ @{ ViewBag.Title = "Index"; ViewBag.Name ...
- ASP.NET使用Razor语法无法正确识别.cshtml文件
ASP.NET使用WebPage编程的好处之一是可以使用强大的Razor语法, 但初次使用Razor语法会碰到一个比较头疼的问题就是无法直接写一个.cshtml让浏览器去识别,查资料也没有找到相关问题 ...
- mvc 4 razor语法讲解和使用
1.这里的 @{Layout="文件路径";} 代码块指定了整个项目默认所使用的布局文件(如图:) @RenderBody()对于所有的页面默认的情况下都会使用这个布局(Web ...
随机推荐
- 【并发编程特性】并发编程特性之五种特性的探讨-volatileandsynchronized
title: [并发编程特性]并发编程特性之五种特性的探讨 date: 2021-11-18 10:16:05.492 updated: 2021-12-26 17:43:10.414 url: ht ...
- intel 虚拟化 VT-d VT-x VT-c 的区别
intel 虚拟化 VT-d VT-x VT-c 有什么区别,各是什么意思,有什么作用 简单描述理解 VT-d VT-x VT-c VT-d 英文全程为 Virtualization Technolo ...
- 由浅入深理解C#中的事件
目录 本文较长,给大家提供了目录,可以直接看自己感兴趣的部分. 前言 有关事件的概念 示例 简单示例 标准 .NET 事件模式 使用泛型版本的标准 .NET 事件模式 补充 总结 参考 ...
- Spring MVC的生命周期与简单三大组件的简单介绍
1.说到Spring MVC就会想到它是基于MVC设计模式的思想来设计的: 那么MVC设计模式是什么呢? 下面来介绍一下 MVC 设计模式 MVC是模型(model)-视图(view)-控制器(con ...
- 降低node版本,怎么降低node版本
降低node版本,怎么降低node版本? 部分老旧项目需要使用低版本的node,网上很多是无效的,高版本无法直接安装低版本node,但是低版本nodejs可以安装部分高版本node,从而达到升级效果. ...
- Spire.Cloud 在线协同编辑Word文档
协同编辑,即项目管理者在用户管理系统下,允许多人(用户)同时编辑同一Word/Excel/PPT 文档.Spire.Cloud支持的协同编辑模式包含两种: 1. 快速模式:其他编辑者可以及时看到对文档 ...
- ROMA集成关键技术:增量数据集成
摘要:本文将详解ROMA集成关键技术-增量数据集成技术. 本文分享自华为云社区<ROMA集成关键技术(2)-增量数据集成技术>,作者:华为云PaaS服务小智 . 1.概述 ROMA平台的核 ...
- 洞见商业新机,云原生数据库GaussDB让企业决策更科学
摘要:华为云GaussDB(for Redis)为数位科技打造了一个稳定可靠.高效安全.卓越性能的大数据引擎,KV存储降本80%,助力实体企业数字化转型之路走的更加稳健. 本文分享自华为云社区< ...
- 云图说|一张图看懂一站式DevOps利器——华为云DevCloud
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 华为云DevCl ...
- Linux如何进行GPIO读写操作的?
摘要:本文介绍GPIO的读写,介绍基本原理,以及不同读写方式的性能. 本文分享自华为云社区<Linux 基于sysfs的GPIO读写操作>,作者:一颗小树x . 前言 最近接触到Linux ...