更新项目中的布尔值以在网站上批准它们 - 多个项目

时间:2013-01-03 19:31:19

标签: c# asp.net asp.net-mvc asp.net-mvc-4 http-post

我已经从数据库中创建了一个项目列表。这些都正确显示。现在我想将更改的布尔值保存到我的数据库中。我怎样才能将所有这些物品都收到我的控制器,以便我可以通过foreach或其他东西来循环它们?

CONTROLLER

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是空的

PAGE

@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>
}

2 个答案:

答案 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>