C# 使用列表扩展Html.DropDownList
我想扩展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
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
忽略)。谢谢。我的观点是,我希望我的助手使用所有类型的列表,而不仅仅是枚举,这正是添加这些参数所要做的。