Добрый день, все
У меня есть представление Search Edit, которое строго типизировано для моего класса модели поиска, показанного ниже (упрощенно).
![Searches and Custodians](https://i.stack.imgur.com/cifHN.png)
Я хочу отобразить хранителей, которые относятся к редактируемому поиску, в списке со всеми хранителями, с выбранными текущими.
Действие Get Edit моего контроллера выглядит так:
public ActionResult Edit(int id, int searchListId = 0)
{
if (searchListId != 0)
{
Session["CurrentSearchListID"] = searchListId;
}
ProjectContext mydb = db;
Search search = Search.Find(mydb, id);
IEnumerable<SelectListItem> selectedItems =
from c in Custodian.List(mydb)
select new SelectListItem
{
Selected = (search.Custodians.Contains(c)),
Text = c.CustodianName,
Value = c.ToString()
};
ViewBag.Custodians = selectedItems;
return View(search);
}
И мой список просмотров выглядит так:
@{
//List<Kiersted.Keps.BusinessObjects.Custodian> Custodians = ViewBag.Custodians;
IEnumerable<SelectListItem> SelectedItems = ViewBag.Custodians;
}
@Html.ListBox("Custodians", SelectedItems);
Это создает список с изображением Хранителей, но ни один из них не выбран (я подтвердил, что некоторые из SelectListItems точно описывают хранителя как выбранного. Я попытался использовать ListBoxFor, и он производит то же самое, когда заполняется MultiSelectList.
Наконец, я решил просто заставить его делать то, что я хочу, но это не возвращает выбранных Хранителей при Подтверждении.
<select id="Custodians" multiple="multiple" name="Custodians">
@foreach (Kiersted.Keps.BusinessObjects.Custodian cust in Custodians)
{
if (Model.Custodians.Contains(cust))
{
<option value="@cust.CustodianID" selected="selected">@cust.CustodianName</option>
}
else
{
<option value="@cust.CustodianID" >@cust.CustodianName</option>
}
}
</select>
Кто-нибудь знает, как вы должны сделать это?
Редактирование:
ListBox Например
ОК, так что, немного покопавшись, я теперь выбрал Хранителей, выбранных в списке, которые соответствуют Поисковым Хранителям. Ниже приведен код вида:
<div class="editor-field">
@Html.ListBoxFor(model => model.Custodians, allCustodians.Select(cust => new SelectListItem {
Text = cust.CustodianName,
Value = cust.CustodianID.ToString(),
Selected = true}),
new { Multiple = "multiple" })
</div>
Если я выберу еще нескольких хранителей, как мне вернуть их (или, скорее, их соответствующие значения) обратно в элемент управления после отправки?