使用子实体选择列表框和HTTPPost困难编辑视图

时间:2011-11-16 19:36:28

标签: c# asp.net-mvc entity-framework entity-framework-4.1 html.listboxfor

美好的一天,所有

我有一个搜索编辑视图,该视图是我的搜索模型类的强类型,如下所示(简化)。 Searches and Custodians

我想在显示所有保管人的列表框中显示归因于正在编辑的搜索的保管人,并选择当前保管人。

我的控制器的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时产生相同的东西。< / p>

最后我决定强迫它做我想做的事,但这并不会在提交时返回选定的保管人。

<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>

任何人都知道你假设这样做了吗?

编辑:

ListBoxFor示例

好的,所以在摆弄了一段时间之后,我现在已经在列表框中选择了与搜索保管人相对应的保管人。以下是查看代码:

<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>

如果我选择了几个托管人,我如何在提交时将它们(或相应的值)反馈给控件?

1 个答案:

答案 0 :(得分:2)