Изменить 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)
Другие вопросы по тегам