Изменить Selected = true в SelectedListItem в ASP.NET MVC3 Просмотр по условию
Это моя модель:
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})
Есть ли способ сделать это? и если я ошибаюсь, использовать встроенную лямбду, есть ли другой способ справиться с этим?
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)