2016-06-07 40 views
-2

我想扩展DropDownList以接受任何类型的列表。用列表扩展Html.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); 
     } 

如何重构这个代码,以便它可以用于所有类型的像列表(车辆类型,让模特,一年..等)

+1

你可以有参数'IEnumerable的项目,串dataValueField,串dataTextField'并在该方法中使用'新的SelectList(项目,dataValueField,dataTextField)'建立'的IEnumerable '。注意:没有必要设置'SelectListItem'的'Selected'属性(它被'SelectExtensions.DropDownListFor'忽略)。 –

+0

谢谢。我的观点是,我希望我的帮手使用所有类型的列表而不仅仅是枚举 – YosrJ

+1

这正是添加这些参数所要做的。 –

回答

0

我得到了我的代码使用下面的代码工作:

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); 
     }