2016-06-07 75 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); 
     }