2016-04-21 89 views
1

我有一个模型(称为计划),它的属性之一是练习的列表(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") 
} 

我使用视图模型PlanExercise在该视图

回答

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]属性标记。

+0

嗯,我试过,但似乎当我添加httppost属性的方法甚至没有调用,所以我认为这是关于什么方法获得(方法的头部之间的括号内) – Elad

+0

好吧,刚注意到你的形式是也错了 - 它的需要是@using(Html.BeginForm(“AddExercises”,“Finish”))'(假设你的控制器被命名为'FinishConroller') –

+0

是的,你是对的,但现在它告诉我这里有问题行:foreach(INT在选定的操作引导) – Elad