我有一个搜索编辑视图,它被强输入到我的搜索模型类,如下所示(简化)。
我想在显示所有托管人的列表框中显示归因于正在编辑的搜索的托管人,并选择当前托管人。
因此,我的控制器的 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>
有人知道你应该怎么做吗?
编辑:
列表框例如
好的,所以在摆弄了一段时间之后,我现在已经在与搜索托管人相对应的列表框中选择了托管人。下面是查看代码:
<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>
如果我选择了更多的保管人,我如何在提交时让他们(或者他们的相应值)回到控件?