我试图传递已选中复选框的项目列表。问题是当我按提交时,我的控制器没有从视图中收到任何东西(我的IEnumerable类型的项目为空)
以下是我的观点:
@model IEnumerable<MyApp.Models.MyClass>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
</head>
<body>
<div>
@using (Html.BeginForm())
{
foreach(var item in Model)
{
Html.CheckBoxFor(modelItem => item.Checked);
Html.DisplayFor(modelItem => item.Url);
<br/>
}
<input type="submit" value="Submit" />
}
</div>
</body>
</html>
这是我的模特:
namespace MyApp.Models
{
public class MyClass
{
public string Url;
public bool Checked;
public MyClass(string item)
{
Url = item;
}
public MyClass()
{
}
}
}
这是我的控制者:
[HttpPost]
public ActionResult Something(IEnumerable<MyClass> items)
{
//bla bla bla
}
答案 0 :(得分:0)
对于我的情况,我会这样做。
foreach(var item in Model)
{
<input type="checkbox" name="removefromcart" value="@(item.Id)" />
Html.DisplayFor(modelItem => item.Url);
<br/>
}
在我的控制器类
中 public ActionResult UpdateWishlist(FormCollection form)
{
var allIdsToRemove = form["removefromcart"] != null
? form["removefromcart"].Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse)
.ToList()
: new List<int>();
答案 1 :(得分:0)
你可以试试这个。
foreach(var item in Model)
{
<input type="checkbox" name="removefromcart" value="@item.Checked" />
Html.DisplayFor(modelItem => item.Url);
<br/>
}
然后你的控制器可以修改为。
[HttpPost]
public ActionResult Something(string[] removefromcart) //you will get all the values as string array.
{
//bla bla bla
}
这是一个similar answer,可能会帮助您