如何使用列表设置所选模型?

时间:2014-11-24 13:07:09

标签: asp.net-mvc-3

在我的控制器中,我在ViewBag中设置项目:

List<ShopItemModel> items = new List<ShopItemModel>();
/* populate my items */
ViewBag.Items = items;

所以在cshtml上我通过列表运行,但是如何连接它以便在回发时设置控制器中Post方法的参数?

CSHTML:

@model Models.ShopItemModel

<h2>Webshop</h2>

@foreach( var item in ViewBag.Items)
{
    using (Html.BeginForm())
    {
        <p>@item.Name</p> <!-- List the item name, but not bounded? -->

        @Html.LabelFor(model => model.Name, new { Name = item.Name }) <!-- outputs just "Name", not the items name -->

        <input type="submit" value="Buy" />
    }
}

控制器中方法的发布版本:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(ShopItemModel m)
{
    return View();
}

但是如何修复此绑定?所以我从列表中获取所选项目?

1 个答案:

答案 0 :(得分:0)

在您看来:

using (Html.BeginForm())
{
    for (int i = 0; i < Model.Count; i++)
    {
       @Html.LabelFor(model => model[i].Name)
    }
}

这将生成如下的html控件:

<input name="ShopItemModel[3].Name"  ... 

如果您在表单中使用它,在控制器中迭代POSTed模型数据:

foreach (var item in model)
{
    ... do something to each item
}

可以在视图中使用foreach循环,而不是for循环,例如here