擴展方法IEnumerable 轉換為IList ,提供@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 = "",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、調用方法如下:

ViewBag.Fruits = list.ToSelectListItem(it => it.Name, it => it.Color, "", new SelectListItem() { Text = "請選擇水果", Value = "", Selected = true });


 @Html.DropDownList("Fruits ",ViewBag.Fruits as IList<SelectListItem>)          

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM