热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一段用于生成ASP.NETMVC中DropDownListFor的SelectListItem可枚举的集合

直接贴代码了:publicstaticclassEnumerableExtension{<summary>

直接贴代码了:

 

    public static class EnumerableExtension
    {
        /// 
        /// 生成用于 ASP.NET Mvc 中 DropDownListFor 的 SelectListItem 可枚举的集合
        /// 
        /// 类型
        /// 集合
        /// 得到下拉框的 Text 的委托
        /// 得到下拉框的 Value 的委托
        /// 选中的值。建议不要设置与模型状态不一致的值,比如当前提交的下拉框中的值为 1,您如果设置 2,那么还是会显示 1,因为 Mvc 默认会从当前上下文中取值
        /// 初始化项,可为 null
        /// 
        public static IEnumerable ToDropDownListItems(this IEnumerable source, Funcstring> funText, Funcstring> funValue, string selectedValue, IDictionary<string, string> initItems = null)
        {
            if (initItems != null && initItems.Count > 0)
            {
                foreach (var item in initItems)
                {
                    SelectListItem resultItem = new SelectListItem
                    {
                        Text = item.Key,
                        Value = item.Value,
                        Selected = item.Value == selectedValue
                    };
                    yield return resultItem;
                }
            }
            if (source != null)
            {
                IEnumerator sourceIterator = source.GetEnumerator();
                while (sourceIterator.MoveNext())
                {
                    T entityItem = sourceIterator.Current;
                    yield return new SelectListItem
                    {
                        Text = funText(entityItem),
                        Value = funValue(entityItem),
                        Selected = funValue(entityItem) == selectedValue
                    };
                }
            }
        }
    }

 

 

简单调用:

 

ViewBag.dropDownListForNewsType = list.ToDropDownListItems(m => m.Name, m => m.Id.ToString(), viewModel.NewsType.ToString());

 

复杂调用:

 

ViewBag.dropDownListForParentId = listCategories.ToDropDownListItems(
m => m.DepthLevel <= 1 ? (m.Name) : ("|" + new string('-', m.DepthLevel * m.DepthLevel) + m.Name), 
m => m.Id.ToString(), 
viewModel.ParentId.ToString(), 
new Dictionary<string, string>() { { "===请选择===", "0" } }
);

 

运行效果图:

 简单调用的运行效果图:

复杂调用的运行效果图:


推荐阅读
  • MVC框架下使用DataGrid实现时间筛选与枚举填充
    本文介绍如何在ASP.NET MVC项目中利用DataGrid组件增强搜索功能,具体包括使用jQuery UI的DatePicker插件添加时间筛选条件,并通过枚举数据填充下拉列表。 ... [详细]
  • C#爬虫Fiddler插件开发自动生成代码
    哈喽^_^一般我们在编写网页爬虫的时候经常会使用到Fiddler这个工具来分析http包,而且通常并不是分析一个包就够了的,所以为了把更多的时间放在分析http包上,自动化生成 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • Activity跳转动画 无缝衔接
    Activity跳转动画 无缝衔接 ... [详细]
  • 本文介绍了多种将多行数据合并为单行的方法,包括使用动态SQL、函数、CTE等技术,适用于不同的SQL Server版本。 ... [详细]
  • Lua基本语法lua与C#的交互(相当简单详细的例子)
    lua脚本与C#的交互本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验——高分辨率用户请根据需求调整网页缩放比例)1LuaAndC#——L ... [详细]
  • 本文探讨了在使用 ClickOnce 部署方式时遇到的自动更新失败问题,包括本地安装与服务器安装的不同表现,并提供了详细的解决方案。 ... [详细]
  • 本文详细介绍了MySQL表分区的概念、类型及其在实际应用中的实施方法,特别是针对Zabbix数据库的优化策略。 ... [详细]
  • 本文将指导你如何通过自定义配置,使 Windows Terminal 中的 PowerShell 7 更加高效且美观。我们将移除默认的广告和提示符,设置快捷键,并添加实用的别名和功能。 ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • Nibblestutotials.net教程 – Blend  Silverlight1系列之Button Basic
    Basic:createonebutton文中三部分所用资源及代码下载:part1,part2,part3Buttonsbasicpart1:drawingNibbl ... [详细]
  • 万事起于配置开发环境
    万事起于配置开发环境 ... [详细]
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • HTML download 属性详解及应用
    本文探讨了 HTML 中 download 属性的应用场景及其在不同浏览器中的实现方式,通过示例代码展示了如何利用 JavaScript 实现文件下载功能。 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
author-avatar
叶子1209
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有