mvc 5 - 将已检查项目列表从视图传递到控制器

时间:2016-03-13 12:34:48

标签: c# asp.net-mvc

我试图传递已选中复选框的项目列表。问题是当我按提交时,我的控制器没有从视图中收到任何东西(我的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
}

2 个答案:

答案 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,可能会帮助您