首页 > 代码库 > 扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用
扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用
由于在MVC中经常会使用到@Html.DropDownList方法,而该方法接收的是List<SelectListItem> 参数,因此就想着写一个扩展方法,直接把IEnumerable转换为List<SelectListItem>类型,这样使用起来会比较方便
正式进入正文。
1、首先创建下面实体:
//水果类 public class Fruit { public string Code { get; set; } public string Name { get; set; } public string Color { get; set; } }
2、编写扩展方法,把IEnumerable转换为List<SelectListItem>类型,代码如下:
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 = http://www.mamicode.com/"",SelectListItem NewItem=null) where T : class,new() { var list = new List<SelectListItem>(); if (NewItem != null) { list.Add(NewItem); } string _text = ""; string _value = http://www.mamicode.com/""; 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 =http://www.mamicode.com/ ValuePropertyInfo.GetValue(item).ToString() }; if (!string.IsNullOrWhiteSpace(selectValue) && selectValue =http://www.mamicode.com/= selectItem.Value) { selectItem.Selected = true; } list.Add(selectItem); } return list; } }
3、调用方法如下:
ViewBag.Fruits = list.ToSelectListItem(it => it.Name, it => it.Color, "", new SelectListItem() { Text = "请选择水果", Value = http://www.mamicode.com/"", Selected = true }); @Html.DropDownList("Fruits ",ViewBag.Fruits as IList<SelectListItem>)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。