有人可以告诉我如何将选定的相关隐藏字段值列表传递给控制器。指定的字段返回值是布尔值(true)。有超过100个列表项。如果管理员选择(已分配)列表并提交,则它会将所有列表值传递给控制器并更新数据库。
这是我的浏览页面的chtml代码:
@using (Html.BeginForm("CAssigned", "Orders", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@foreach (var item in Model)
{
@Html.HiddenFor(model => item.LocationId)
<td>
@Html.DisplayFor(modelItem => item.MapIcons)
@Html.HiddenFor(model => item.MapIcons,"MapIcons")
</td>
<td>
@Html.EditorFor(modelItem => item.Assigned)
@Html.HiddenFor(model => item.Assigned)
</td>
}
<input type="Submit" value="Select" />
}
我的控制器
[HttpGet]
public ActionResult CAssigned()
{
var orders = db.Locations.ToList();
return View(orders);
}
[HttpPost]
public ActionResult CAssigned(IEnumerable<Location>)
{
return View();
}
html查看源代码
<input data-val="true" data-val-number="The field LocationId must be a number." data-val-required="The LocationId field is required." id="item_LocationId" name="item.LocationId" type="hidden" value="1" />
<td>
red-dot.png
<input Length="8" id="item_MapIcons" name="item.MapIcons" type="hidden" value="red-dot.png" /></td>
<td>
<input class="check-box" data-val="true" data-val-required="The Assigned to Courier field is required." id="item_Assigned" name="item.Assigned" type="checkbox" value="true" /><input name="item.Assigned" type="hidden" value="false" />
<input type="Submit" value="Select" />
<input id="item_Assigned" name="item.Assigned" type="hidden" value="False" />
<td>
答案 0 :(得分:1)
使用foreach循环不会生成绑定到集合所需的正确名称属性,您需要对for
类型使用EditorTemplate
循环或自定义Location
表单控件包括索引器。有关如何命名集合的表单控件以及使用EditorTemplate
的详细信息,请参阅this answer。
要使用for循环,您需要查看
@model IList<yourAssembly.Location>
@using (Html.BeginForm()) // no need to add the parameters since you posting to the same method
{
<table>
for(int i = 0; i < Model.Count; i++)
{
<tr>
<td>
@Html.HiddenFor(m => m[i].LocationId)
@Html.HiddenFor(m => m[i].MapIcons)
@Html.DisplayFor(m => m[i].MapIcons)
</td>
<td>
@Html.CheckBoxFor(m => m[i].Assigned)
</td>
</tr>
}
</table>
<input type="Submit" value="Select" />
}
并且您需要发布方法签名(为参数添加名称)
[HttpPost]
public ActionResult CAssigned(IEnumerable<Location> model)
附注:
Assigned
属性的隐藏输入。你有
已经生成了一个复选框(以及相关的隐藏输入)
属性所以它无论如何都会被忽略<input>
不是<tr>
元素的有效子元素,因此请确保
您将它们包含在<td>
元素