编辑带有子实体选择列表框和 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 困难的视图的主要内容,如果未能解决你的问题,请参考以下文章