我已经从数据库中创建了一个项目列表。这些都正确显示。现在我想将更改的布尔值保存到我的数据库中。我怎样才能将所有这些物品都收到我的控制器,以便我可以通过foreach或其他东西来循环它们?
public class ItemController : Controller
{
private SocialGEOContext db = new SocialGEOContext();
public ActionResult ApproveItems()
{
Utility ut = new Utility();
IEnumerable<Item> items;
items = ut.GetAllDistrictItems();
return View(items);
}
[HttpPost]
public ActionResult ApproveItems( ??? )
{
???
}
在HttpPost我试过
[HttpPost]
public ActionResult ApproveItems( IEnumerable<Item> ViewItems )
{
foreach (Item item in ViewItems)
{
var testje = item.ItemTitle;
}
return View();
}
但是ViewItems是空的
@model IEnumerable<LibModels.Item>
@{
ViewBag.Title = "ItemsByDistrict";
}
<h2>All items from district</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.ItemID)
</td>
<td>
@Html.DisplayFor(modelItem => item.ItemTitle)
</td>
<td>
@Html.DisplayFor(modelItem => item.ItemCreateddate)
</td>
<td>
@Html.DisplayFor(modelItem => item.ItemDescription)
</td>
<td>
@Html.EditorFor(modelItem => item.ItemApproved)
</td>
</tr>
}
</table>
<p>
<input type="submit" value="Edit" />
</p>
</fieldset>
}
答案 0 :(得分:0)
您的页面仅包含item.ItemApproved
的编辑器,但在post方法中,您尝试获取item.ItemTitle
。尝试将控制器发布方法更改为:
foreach (Item item in ViewItems) {
var testje = item.ItemApproved;
}
答案 1 :(得分:0)
您需要使用for循环才能使模型绑定起作用
@for(int i; i < Model.Count; i++) {
<tr>
<td>
@Html.DisplayFor(modelItem => modelItem[i].ItemID)
</td>
<td>
@Html.DisplayFor(modelItem => modelItem[i].ItemTitle)
</td>
<td>
@Html.DisplayFor(modelItem => modelItem[i].ItemCreateddate)
</td>
<td>
@Html.DisplayFor(modelItem => modelItem[i].ItemDescription)
</td>
<td>
@Html.EditorFor(modelItem => modelItem[i].ItemApproved)
</td>
</tr>
}
有关模型绑定集合的详细信息,请参阅this article
注意:您需要在模型上调用ToList()
,以便您可以使用索引
换句话说,在你的行动方法中:
public ActionResult ApproveItems()
{
Utility ut = new Utility();
IEnumerable<Item> items;
items = ut.GetAllDistrictItems();
return View(items.ToList());
}
然后在视图中更改模型:
@model IList<LibModels.Item>