在ASP.NET MVC3中的SelectedListItem中更改Selected = true按条件查看

时间:2012-06-11 06:43:32

标签: asp.net-mvc asp.net-mvc-3 razor drop-down-menu asp.net-mvc-views

这是我的模特:

public class MyModel{
 public string Name { get; set; }
 public string listType { get; set; }
 public string SelectedItem { get; set; }
}

我有一个部分观点:

@model List<MyModel>
@{

SelectListItem iEqualTo = new SelectListItem { Text = "Equel To", Value = "EqualTo" };
SelectListItem iNotEqualTo = new SelectListItem { Text = "Not Equal To", Value = "NotEqualTo" };
SelectListItem iGreaterThan = new SelectListItem { Text = "Greater Than", Value = "GreaterThan" };
SelectListItem iLessThan = new SelectListItem { Text = "Less Than", Value = "LessThan" };
SelectListItem iBetween = new SelectListItem { Text = "Between", Value = "Between" };


List<SelectListItem> MyFirstList = new List<SelectListItem>() {
    iEqualTo, iNotEqualTo, iGreaterThan, iLessThan, iBetween
};

List<SelectListItem> MySecondList = new List<SelectListItem>() {
    iEqualTo, iNotEqualTo
};

}


@foreach(var item in Model) {

  if(item.listType =="Firsttype"){

   <span> @Html.DropDownList(item.Name , MyFirstList) </span>

  } else {

   <span> @Html.DropDownList(item.Name , MySecondList) </span>

  }
}

所以我需要在Selected = true List<SelectListItem>DropDownList MyModel.SelectedItem,该项名称等于SelectListItem?你的建议是什么?实际上我的视图中有更多List<SelectListItem>List<SelectListItem>,并且由于某些限制,我无法将@Html.DropDownList(item.Name , MySecondList.each(a=> if (a.ToString() == item.SelectedItem) {a.Selected = true})作为我的模型属性传递,我需要在视图中处理它。我想用lambda内联来处理它,但我不知道是否可能,如下所示:{{1}}

有办法吗?如果我错误使用内联lambda做任何其他方式来处理这个?

1 个答案:

答案 0 :(得分:1)

您可以使用SelectList,它具有带IEnumerable和Object(选定值)的构造函数。

@Html.DropDownList(item.Name, new SelectList(MyFirstList, item.SelectedItem));

修改

我认为在尝试在循环中使用DropDownList时遇到了问题。

您可以尝试使用此通用扩展方法(在静态“帮助程序”类中)

public static IEnumerable<SelectListItem> ToSelectListItem<T, TValue, TText, TSelectedValue>(this IEnumerable<T> enumerable,
            Func<T, TText> text,
            Func<T, TValue> value,
            TSelectedValue selectedValue)
        {
            return enumerable.Select(item => new SelectListItem
            {
                Text = text(item).ToString(),
                Value = value(item).ToString(),
                Selected = value(item).Equals(selectedValue)
            }).AsEnumerable();
        }

然后

@Html.DropDownList(item.Name, MyFirstList.ToSelectListItem(m => m.Text, m => m.Value, item.SelectedItem)