Я написал метод быстрого беглого расширения, чтобы сделать это:
public static IEnumerable<SelectListItem> WithSelected( this IEnumerable<SelectListItem> selectListItems, object selectedvalue )
{
var newItems = new List<SelectListItem>(selectListItems);
foreach( var item in newItems )
item.Selected = item.Value == selectedvalue.ToString();
return newItems;
}
public static IEnumerable<CheckBoxItem> WithSelected(this IEnumerable<CheckBoxItem> selectListItems, int selectedvalue)
{
var newItems = new List<CheckBoxItem>(selectListItems);
foreach (var item in newItems)
item.Checked = item.Id == selectedvalue;
return newItems;
}
public static IEnumerable<CheckBoxItem> WithSelected(this IEnumerable<CheckBoxItem> selectListItems, IEnumerable<int> selectedvalues)
{
var newItems = new List<CheckBoxItem>(selectListItems);
foreach (var item in newItems)
item.Checked = selectedvalues.Contains(item.Id);
return newItems;
}
Может быть, сушилкой, я думаю, но она работает нормально. Использование будет что-то вроде:
<%foreach(Foo i in Model){ %>
<tr>
<td><%=i.title%></td>
<td><%=Html.DropDownList("order"+i.id.ToString(), (ViewData["SequenceDropDown"] as SelectList)).WithSelected(i.Sequence) %></td>
</tr>
<%} %>