C# 使用列表扩展Html.DropDownList

C# 使用列表扩展Html.DropDownList,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我想扩展DropDownList以接受任何类型的列表 我的代码是用于枚举的。我想将它用于任何列表,而不仅仅是枚举 public static MvcHtmlString DropDownListFor<TModel, TProperty, TEnum>( this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TPr

我想扩展DropDownList以接受任何类型的列表

我的代码是用于枚举的。我想将它用于任何列表,而不仅仅是枚举

   public static MvcHtmlString DropDownListFor<TModel, TProperty, TEnum>(
                   this HtmlHelper<TModel> htmlHelper,
                   Expression<Func<TModel, TProperty>> expression,
                   TEnum selectedValue)
        {
            var values = Enum.GetValues(typeof(TEnum)).Cast<TEnum>();
            var items = from value in values
                        select new SelectListItem()
                        {
                            Text = value.ToString(),
                            Value = value.ToString(),
                            Selected = value.Equals(selectedValue)
                        };
            return SelectExtensions.DropDownListFor(htmlHelper, expression, items);
        }
public static MvcHtmlString DropDownListFor(
这个HtmlHelper HtmlHelper,
表情表情,
TEnum选择值)
{
var values=Enum.GetValues(typeof(TEnum)).Cast();
var items=从值中的值
选择新的SelectListItem()
{
Text=value.ToString(),
Value=Value.ToString(),
Selected=value.Equals(selectedValue)
};
返回SelectExtensions.DropDownListFor(htmlHelper、表达式、项);
}

如何重构此代码,使其可用于所有类型的列表,如(车辆类型、品牌型号、年份等)

我使用以下代码使代码正常工作:

  public static MvcHtmlString DropDownListFor<TModel, TProperty>(
            this HtmlHelper<TModel> htmlHelper,
            Expression<Func<TModel, TProperty>> expression,
            List<dynamic> selectedValue)
        {
                           var items = from value in selectedValue
                        select new SelectListItem()
                        {
                            Text = value.ToString(),
                            Value = value.ToString()
                        };
            return htmlHelper.DropDownListFor(expression, items);
        }
public static MvcHtmlString DropDownListFor(
这个HtmlHelper HtmlHelper,
表情表情,
列出所选值)
{
变量项=从selectedValue中的值
选择新的SelectListItem()
{
Text=value.ToString(),
Value=Value.ToString()
};
返回htmlHelper.DropDownListFor(表达式,项);
}

您可以使用参数
IEnumerable items、string dataValueField、string dataTextField
并在方法中使用
new SelectList(items、dataValueField、dataTextField)
来构建
IEnumerable
。旁注:设置
SelectListItem
Selected
属性没有意义(它被
SelectExtensions.DropDownListFor
忽略)。谢谢。我的观点是,我希望我的助手使用所有类型的列表,而不仅仅是枚举,这正是添加这些参数所要做的。