编辑带有子实体选择列表框和 HTTPPost 困难的视图

Posted

技术标签:

【中文标题】编辑带有子实体选择列表框和 HTTPPost 困难的视图【英文标题】:Edit View with child entity selection listbox and HTTPPost difficulties 【发布时间】:2011-12-30 18:00:25 【问题描述】:

我有一个搜索编辑视图,它被强输入到我的搜索模型类中,如下所示(简化)。

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

我的控制器的 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>

如果我选择了更多的保管人,我如何在提交时让他们(或者他们的相应值)回到控件?

【问题讨论】:

【参考方案1】:

看到编辑后问题归结为多选模型绑定,也许您会发现这些有用?

How does a multiple select list work with model binding in ASP.NET MVC?

http://ittecture.wordpress.com/2009/04/30/tip-of-the-day-198-asp-net-mvc-listbox-controls/

【讨论】:

我没有忽略你。我刚刚受命负责项目的不同部分。我将尽快尝试实施该博文中的建议。 @M_M 继续奖励赏金。我对以这种方式使用 ViewModel 进行了一些研究,这似乎是公认的做法。我不想让 Hendrikswan 错过 50 次代表。

以上是关于编辑带有子实体选择列表框和 HTTPPost 困难的视图的主要内容,如果未能解决你的问题,请参考以下文章

使用带有排序组合框和页面组合框上的许多项目的列表视图

win32-改变Combox的编辑框和下拉列表的背景颜色和文本字体颜色

MS Access - 带有组合框和文本框的 If 语句

带有选取器(分段控件)子视图和选择手势的列表项

再次查询同一实体

更新文本框后面的数据表?