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 ...
随机推荐
- 解决 IDEA 报错ERROR:JAVA: 无效的源发行版: 11
解决 IDEA 报错ERROR:JAVA: 无效的源发行版: 11 原因 一般都是创建工程的时候 一路next 默认选择了 Java Version 11, 而本地的jdk版本是 8 解决 File ...
- 新报: 根据IP获取物理地址不需要调用接口啦
一. 复制data文件夹到自己的项目当中 可以进行加载到这个文件即可 博主放入在项目的根目录当中 请移步Gitee pull 该文件 https://gitee.com/yangbuyi/ip_fil ...
- 文心一言 VS 讯飞星火 VS chatgpt (173)-- 算法导论13.3 2题
二.用go语言,将关键字41.38.31.12.19.8连续地插入一棵初始为空的红黑树之后,试画出该结果树. 文心一言: 首先,我们需要了解红黑树的性质.红黑树是一种自平衡二叉查找树,其中每个节点要么 ...
- PyTorch项目源码学习(1)
PyTorch PyTorch是一个开源的深度学习框架,项目地址 https://github.com/pytorch/pytorch 在学术工作中的使用频率较高.其主体由C++开发,PyTorch是 ...
- POJ 3003 DP 寻路 记录路径
POJ 3003 DP 寻路 记录路径 我一开始把M看成是每个a_i的上限了,这是致命的,因为这个题dfs暴力搜索+剪枝是过不了的因为M<=40,全部状态有2的四十次幂. 正解是DP,设dp[i ...
- Blazor技术入门
曾写过点儿前后端分离的项目(Vue+.NET Core Web API).WPF和WinForm.因为Blazor不支持小程序的原因(相对于uniapp),所以只是大概知道Blazor可以写Web.P ...
- 你的JoinHint为什么不生效
本文分享自华为云社区<你的JoinHint为什么不生效[绽放吧!GaussDB(DWS)云原生数仓]>,作者:你是猴子请来的救兵吗 . 引言 提起数据库的Hint,几乎每个DBA都知道这一 ...
- Python 绑定:从 Python 调用 C 或 C++
摘要:您是拥有想要从 Python 中使用的C或 C++ 库的 Python 开发人员吗?如果是这样,那么Python 绑定允许您调用函数并将数据从 Python 传递到C或C++,让您利用这两种语言 ...
- 火山引擎ByteHouse助力中国地震台网中心,快速构建一站式实时数仓
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 近日,中国地震台网中心与火山引擎达成合作,双方将围绕 ByteHouse 实时数仓展开合作. 中国地震台网中心为中国地震局 ...
- 带你全方面了解字节 A/B 实验的文化与工具
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 A/B 测试是在相同的环境下,通过随机的抽样把对照组和控制组进行区分,并分别实行新旧两种策略,结合一定的统计方法来 ...