我添加了@ Html.ListBoxFor我能够正确绑定它但在提交后无法获取多个选定的项目。我错过了什么吗?
// Below is the code for binding
public ActionResult Create()
{
var cities = So.BL.City.GetCities();
SelectList cityList = new SelectList(cities, "Id", "Name", cityId);
TempData["Cities"] = cityList;
return View("Create");
}
[HttpPost]
public ActionResult Create([Bind(Include="Keywords,Cities")] So.Entities.Approval filter)
{
if (ModelState.IsValid)
{
}
return View(filter);
}
以下是视图文件代码。我没有视图模型只是实体
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<table style="width: 100%">
<tr>
<td>
Cities:
</td>
</tr>
<tr>
@* <td>
@Html.DropDownList("Cities", (SelectList)TempData["Cities"])
</td>*@
</tr>
<tr>
<td>
@Html.ListBoxFor(model => model.Id, new SelectList(TempData["Cities"] as MultiSelectList, "Value","Text",new { style = "width:250px" })))
</td>
</tr>
<tr>
<td>
@Html.LabelFor(model => model.Keywords)
</td>
</tr>
<tr>
<td>
@Html.EditorFor(model => model.Keywords)
</td>
</tr>
<tr>
<td>
</td>
</tr>
<tr>
<td>
<input type="submit" value="Create" class="button" />
</td>
</tr>
</table>
答案 0 :(得分:1)
假设您已根据评论将ID属性更改为typeof int[]
,您仍然遇到问题,主要问题是您的POST方法有
[Bind(Include="Keywords,Cities")]
排除了ID
属性的绑定,因此在回发时它将始终为null。当您使用[Bind]
属性时,您应该重新考虑您在做什么,并使用视图模型来显示/编辑您想要的属性,包括SelectList
的属性。
@Html.ListBoxFor()
方法中也有一些无意义的代码。 TempData["Cities"]
已经是SelectList
,因此new SelectList(TempData["Cities"] as MultiSelectList, "Value","Text"
正在将SelectList
转换为MultiSelectList
,然后创建新的SelectList
表单。你所需要的只是
@Html.ListBoxFor(model => model.ID, (SelectList)TempData["Cities"], new { style = "width:250px" })
另外,这个
中的第3个参数SelectList cityList = new SelectList(cities, "Id", "Name", cityId);
不是必需的(不确定您声明cityId
的位置,因为实际上,您的代码无法编译)。 ListBoxFor()
方法根据ID
属性的值选择选项,并忽略selectedValue
构造函数中的SelectList
参数。
最后,在POST方法中,如果模型无效,则返回视图。您需要重新分配TempData["Cities"]
的值,或者在视图中为null
并抛出异常。
答案 1 :(得分:0)
与Andrei建议的一样,您需要将所选值绑定到数组类型。
前端:
<div class="DualListBoxDIV">
@Html.ListBoxFor(model => model.RelatedNewsArticlesSelected, new MultiSelectList(Model.AssignedRelatedNewsArticles, "Value", "Text", Model.RelatedNewsArticlesSelected), new { @class = "SelectedBox", Size = 10 })
</div>
后端:
public string[] RelatedNewsArticlesSelected { get; set; }
public IEnumerable<SelectListItem> AssignedRelatedNewsArticles { get; set; }
public IEnumerable<SelectListItem> UnassignedRelatedNewsArticles { get; set; }