前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用

扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用

作者头像
写代码的猿
发布2019-04-11 14:40:22
7350
发布2019-04-11 14:40:22
举报
文章被收录于专栏:平凡少年平凡少年

由于在MVC中经常会使用到@Html.DropDownList方法,而该方法接收的是List<SelectListItem> 参数,因此就想着写一个扩展方法,直接把IEnumerable转换为List<SelectListItem>类型,这样使用起来会比较方便

正式进入正文。

1、首先创建下面实体:

代码语言:javascript
复制
 //水果类
    public class Fruit
    {
        public string Code { get; set; }
        public string Name { get; set; }
        public string Color { get; set; }
    }

2、编写扩展方法,把IEnumerable转换为List<SelectListItem>类型,代码如下:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;

namespace Common
{
    public static class Extensions
    {
        /// <summary>
        /// 扩展方法,IEnumerable<T>转换为IList<SelectListItem>
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="data">带转换的数据</param>
        /// <param name="Text"></param>
        /// <param name="Value"></param>
        /// <param name="selectValue"></param>
        /// <param name="NewItem">传递过来的SelectListItem,如请选择……</param>
        /// <returns></returns>
        public static IList<SelectListItem> ToSelectListItem<T>(this IEnumerable<T> data, Expression<Func<T, object>> Text, Expression<Func<T, object>> Value, string selectValue = "",SelectListItem NewItem=null) where T : class,new()
        {
            var list = new List<SelectListItem>();
            if (NewItem != null)
            {
                list.Add(NewItem);
            }
            string _text = "";
            string _value = "";
            if (Text.Body is MemberExpression)
            {
                MemberExpression TextMember = (MemberExpression)Text.Body;
                _text = TextMember.Member.Name;
            }
            else if (Text.Body is UnaryExpression)
            {
                UnaryExpression TextMember = (UnaryExpression)Value.Body;
                _text = (TextMember.Operand as MemberExpression).Member.Name;
            }
            if (Value.Body is MemberExpression)
            {
                MemberExpression ValueMember = (MemberExpression)Text.Body;
                _value = ValueMember.Member.Name;
            }
            else if (Value.Body is UnaryExpression)
            {
                UnaryExpression ValueMember = (UnaryExpression)Value.Body;
                _value = (ValueMember.Operand as MemberExpression).Member.Name;
            }
            var type = new T().GetType();
            var TextPropertyInfo = type.GetProperty(_text);
            var ValuePropertyInfo = type.GetProperty(_value);
            foreach (var item in data)
            {
                var selectItem = new SelectListItem() { Text = TextPropertyInfo.GetValue(item).ToString(), Value = ValuePropertyInfo.GetValue(item).ToString() };
                if (!string.IsNullOrWhiteSpace(selectValue) && selectValue == selectItem.Value)
                {
                    selectItem.Selected = true;
                }
                list.Add(selectItem);
            }

            return list;
        }

    }

3、调用方法如下:

代码语言:javascript
复制
ViewBag.Fruits = list.ToSelectListItem(it => it.Name, it => it.Color, "", new SelectListItem() { Text = "请选择水果", Value = "", Selected = true });


 @Html.DropDownList("Fruits ",ViewBag.Fruits as IList<SelectListItem>)          
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-08-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档