在我的控制器中,我在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();
}
但是如何修复此绑定?所以我从列表中获取所选项目?
答案 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