循环复选框以将对象添加到模型列表

时间:2016-04-21 10:47:41

标签: asp.net-mvc-5

我有一个模型(称为计划),其中一个属性是练习列表(ICollection)(这是另一个模型):

public int Id { get; set; }
public virtual ICollection<Exercise> Exercises { get; set; }

所以我尝试创建一个创建计划的视图和另一个视图,以便从数据库中的练习向计划添加练习。 所以我做了一个循环,范围来自数据库的所有练习,每一个我添加了一个复选框,其ID和练习的ID相同,我想我可以用它做一些事情,但我尝试了很多东西和方法,我甚至无法将复选框的输入发送到控制器。 我必须说我对使用mvc进行编程有点新意,我试图在互联网上查看,我真的不知道那些知道编程的人,所以这才是我解决问题的最后机会。很抱歉,如果这是一个很长的帖子或者你甚至评论太容易了,但我真的需要这个。

这对我的项目来说是非常具体的,我所关注的是将输入发送到控制器,但我对不同的解决方案持开放态度,因为我很绝望。

public async Task<ActionResult> AddExercises(string id,int[] selectedExercises)
{
    List<Exercise> list = new List<Exercise>();
    foreach (int i in selectedExercises)
    {
        list.Add(db.Exercises.Find(i));
    }
    db.Plans.Find(id).Exercises = list;
    await db.SaveChangesAsync();
    return RedirectToAction("index");
}

我确定它错了,我尝试的观点是:

@using (Html.BeginForm("index", "Plans"))
{
    @Html.AntiForgeryToken()
    foreach (var i in Model.Exercises)
    {
        <table class="table">
            <tr>
                <td>@Html.DisplayFor(modelItem => i.Level)</td>
                <td>@Html.DisplayFor(modelItem => i.Description)</td>
                <td>@Html.DisplayFor(modelItem => i.MoreDescription)</td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id = i.Id }) |
                    @Html.ActionLink("Details", "Details", new { id = i.Id }) |
                    <input type="checkbox" class="selectedObjects" id="i.id" /> |
                </td>
            </tr>
        </table>
    }
    @Html.ActionLink("Finish", "AddExercises")
}

我在此视图中使用viewModel PlanExercise

1 个答案:

答案 0 :(得分:0)

您的复选框没有name属性或value属性,因此无需提交任何内容。你html需要

<input type="checkbox" name="selectedExercises" value="@i.id" />

然后为了提​​交表单,您需要一个提交按钮(删除@Html.ActionLink("Finish", "AddExercises")

<input type="submit" value="Save" />

并且表格需要(假设控制器为FinishController

@using (Html.BeginForm("AddExercises", "Finish"))

并且该方法需要使用[HttpPost]属性进行标记。