【发布时间】:2015-05-11 13:41:50
【问题描述】:
谁能告诉我如何将选定的相关隐藏字段值列表从控制器传递给控制器。分配的字段返回值为 Boolean(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>
【问题讨论】:
-
您不能使用
foreach循环绑定到集合(您正在生成重复的id属性(无效的html)和name与您的模型无关的属性(没有索引器) .您需要为模型使用for循环或自定义EditorTemplate。无论如何,为什么你有一个隐藏的属性Assigned输入,因为你有一个EditorFor(),所以它会被忽略属性。并且您的 POST 方法参数需要是您的模型(public ActionResult CAssigned(IEnumerable<yourModel>),因为这是您的视图所基于的。 -
感谢您的重播。 @for(var i = 1; i
-
您的模型需要实现
IList,然后是for(int i = 0; i < Model.Count; i++) { @Html.HiddenFor(m => m[i].LocationId .... },这将生成<input name="[0].LocationId" ..>、<input name="[1].LocationId" ..>等。有关详细信息,另请参阅this answer -
谢谢斯蒂芬。当我更改我的控制器 public ActionResult CAssigned(IEnumerable
) 时,它会出现预期的错误 1 标识符。那是什么错误? -
您还需要为参数命名 -
public ActionResult CAssigned(IList<Location> model)- 请注意我将其命名为IList以匹配您传递给视图的模型。现在model将包含您可以循环并保存或任何您想做的集合。
标签: c# asp.net-mvc asp.net-mvc-4