//把数字转成枚举
public static T[] NumStringsToEnums<T>(string enumNumString ) //where T:Enum
{
if (string.IsNullOrEmpty(enumNumString)) return null;
string[] aryNums = enumNumString.Split(','); Type enumType = typeof(T); List<T> list = new List<T>();
for(int i=0;i< aryNums.Length; i++)
{
int num = 0;
int.TryParse(aryNums[i].Trim(), out num);
if (num == 0) continue; Array enumValues = Enum.GetValues(enumType);
foreach (Enum enumValue in enumValues)
{
Int32 key = Convert.ToInt32(enumValue);
if (key == num)
{
list.Add((T)(object)enumValue);
break;
}
}
}
return list.ToArray();
}
//判断字符串数字是否是枚举中的值
public static bool HasEnumInNumString<T>(string enumNumString, T findValue) //where T:Enum
{
T[] enums = NumStringsToEnums<T>(enumNumString);
if (enums == null) return false; for(int i=0; i<enums.Length; i++)
{
if((int)(object)enums[i]== (int)(object)findValue)
{
return true;
}
}
return false;
} //数字的枚举串变成汉字
public static string[] EnumNumsToStrings<T>(string enumNumString)
{
if (string.IsNullOrEmpty(enumNumString)) return new string[0]; T[] enums = NumStringsToEnums<T>(enumNumString);
string[] chinese = new string[enums.Length];
for(int i=0; i<enums.Length; i++)
{
chinese[i] = GetEnumCustomDescription(enums[i]);
}
return chinese;
} //数字的枚举串变成前端复选框(包括没有选中的)
public static Tuple<T, string, bool> [] EnumNumsToCheckBoxInfo<T>(string enumNumString)
{
Type enumType = typeof(T);
Array enumValues = Enum.GetValues(enumType);
int n = enumValues.Length;
Tuple<T, string, bool>[] tuples = new Tuple<T, string, bool>[n];
for (int i = 0; i < n; i++)
{
T enumValue = (T)(object)enumValues.GetValue(i);
string chinese = GetEnumCustomDescription((Enum)(object)enumValue);//GetDescription((Enum)(object)enumValue,true);
bool found = HasEnumInNumString(enumNumString, enumValue); tuples[i] = new Tuple<T, string, bool>(enumValue,chinese, found);
}
return tuples;
}
//枚举值转换成前端需要的复选框需要的HTML
public static string EnumNumsToCheckBoxHtml<T>(string enumNumString, string inputVarName,string seperator)
{
StringBuilder sb = new StringBuilder();
Tuple<T, string, bool>[] tuples = EnumNumsToCheckBoxInfo<T>(enumNumString);
for (int i = 0; i < tuples.Length; i++)
{
sb.Append("<input type=\"checkbox\" value=\"" + (int)(object)tuples[i].Item1 + "\""
+ (tuples[i].Item3 ? " checked " : "")
+ " name=\"" + inputVarName + "\">" + tuples[i].Item2+ seperator );
//< input type = "checkbox" value = "100" name = "checkboxValue" checked > gif上传阿里云 & nbsp;      
}
return sb.ToString();
}

  调用:

ViewData["bookAttributeHtml"] =
EnumUtil.EnumNumsToCheckBoxHtml<枚举类>("", "前端checkName", "分隔符");

  前端:

 <div class="form-group group-user-group">
<label class="col-sm-2 col-xs-2 control-label">书属性:</label>
<div class="col-sm-10 col-xs-10">
@Html.Raw(ViewData["bookAttributeHtml"])
</div>
</div>

  显示:

C#Enum用Tuple保存值绑定到前端的CheckBox的更多相关文章

  1. WPF实现多值绑定特性以及多值转换

    WPF中的实现 我们首先来看一下常规的绑定 <Window    x:Class="WpfApplicationSample.MainWindow"    xmlns=&qu ...

  2. [vue]v-bind: sytle/class-bind&属性值绑定

    v-bind - style绑定 - class绑定 - 属性值绑定 <!DOCTYPE html> <html lang="en"> <head&g ...

  3. 总结:WPF中MultiBinding多值绑定的方法

    原文:总结:WPF中MultiBinding多值绑定的方法 一.Xaml中绑定代码: <TextBlock  Grid.Row="5" Grid.Column="3 ...

  4. WPF多值绑定及多值转换(MultiBinding和IMultiValueConverter)

    WPF可以使用MultiBinding进行多值绑定,使用IMultiValueConverter进行多值转换 例: (1)转换器 public class ContentConverter : IMu ...

  5. WPF中DatePiker值绑定以及精简查询

    WPF中DatePiker值绑定以及精简查询 1.WPF中DatePiker值绑定 Xaml中值绑定使用Text <DatePicker Text="{Binding strMinDa ...

  6. Django forms 关于select和checkbox设置初始选中值及让前端选中指定值

    Django的forms和models一样很牛逼.他有两种功能,一是生成form表单,还有就是form表单的验证. 这里主要说一下生成form表单时经常用到的需要设置 初始值 / 默认值 的情况. 1 ...

  7. easyui 》 radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中

    获取一组radio被选中项的值var item = $('input[@name=items][@checked]').val();获取select被选中项的文本var item = $(" ...

  8. jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中

    jQuery获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...}); //为Se ...

  9. SharePoint 2013 新建项目字段自动加载上次保存值

    1.点击进入NewForm.aspx页面,编辑页面,插入Script Editor WebPart,如下图: 2.插入后如下图,拖动AutoRecord WebPart到脚本编辑器上面,防止因为加载顺 ...

随机推荐

  1. 707. Design Linked List

    1. 原始题目 Design your implementation of the linked list. You can choose to use the singly linked list ...

  2. 查询每个分组中第N的一条记录

    查询每个分组中第N的一条记录 -- 天气表,每天每个地区采集了多条记录的天气信息,但是时间只记录到了天,导致同一个地区同一天出现了多条天气记录 -- 目的:获取所有地区在每天中第N的一条记录 sele ...

  3. 解决log4j和self4j日志报错Could NOT find resource [logback.groovy]及Could NOT find resource [logback-test.xml]问题

    事件背景: 我的log4j和self4j按照网上的配置,配置成功了,但是报错如下: 让我很是郁闷,于是找了一大圈........ 解决方案: 总结来说就是:log4j.properties和logba ...

  4. Django 笔记(三)模版路径 ~ 静态引用

    1.模版路径: 在 settings,py 里的 TEMPLATES = [] 内添加一句代码拼接路径 'DIRS': [os.path.join(BASE_DIR, 'templates')] 有两 ...

  5. Django makemigrations 不行时

  6. php array_map与array_walk使用对比

    array_map(): 1.array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组,若函数作用后无返回值,则对应的新值数组中为空. 2.回调函 ...

  7. SwipeRefreshLayout详解和自定义上拉加载更多

    个人主页 演示Demo下载 本文重点介绍了SwipeRefreshLayout的使用和自定View继承SwipeRefreshLayout添加上拉加载更多的功能. 介绍之前,先来看一下SwipeRef ...

  8. 【进阶3-5期】深度解析 new 原理及模拟实现(转)

    这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://github.com/yygmind/blog/issues/24 new 运算符创建一个用户定义的对象类型的实例或具有构造函数的 ...

  9. SQL Server 2012-2016-2017 简体中文版下载和序列号

    注:本文来源于<SQL Server 2012-2016-2017 简体中文版下载和序列号> SqlServer 2017 下载地址及密钥 下载地址:ed2k://|file|cn_sql ...

  10. Confluence 6 使用页面请求属性来对慢性能进行问题解决

    这个页面告诉你如何启用页面请求属性.当这个属性启用以后,你可以查看在 Confluence 任何页面完成的一个记录消耗的时间(毫秒).如果 Confluence 反应缓慢的话,一个关于慢页面请求的内部 ...