Asp.net mvc 5 用于将对象添加到模型列表的复选框循环

Asp.net mvc 5 用于将对象添加到模型列表的复选框循环,asp.net-mvc-5,Asp.net Mvc 5,我有一个模型(称为plan),它的一个属性是练习列表(ICollection)(这是另一个模型): public int Id{get;set;} 公共虚拟ICollection练习{get;set;} 所以我尝试创建一个视图来创建一个计划,另一个视图通过数据库中的练习将练习添加到计划中。 因此,我做了一个循环,从数据库中选择所有的练习,对于每个练习,我都添加了一个与练习id相同的复选框,我想我可以用它做些什么,但我尝试了很多方法,甚至无法将复选框的输入发送到控制器。 我必须说,我对使用mvc

我有一个模型(称为plan),它的一个属性是练习列表(
ICollection
)(这是另一个模型):

public int Id{get;set;}
公共虚拟ICollection练习{get;set;}
所以我尝试创建一个视图来创建一个计划,另一个视图通过数据库中的练习将练习添加到计划中。 因此,我做了一个循环,从数据库中选择所有的练习,对于每个练习,我都添加了一个与练习id相同的复选框,我想我可以用它做些什么,但我尝试了很多方法,甚至无法将复选框的输入发送到控制器。 我必须说,我对使用mvc编程有点陌生,我试着在互联网上到处寻找,但我真的不认识会编程的人,所以这是我解决这个问题的最后机会。抱歉,如果这是一篇很长的帖子,或者太容易让你评论,但我真的需要这个

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

公共异步任务加法器练习(字符串id,int[]selectedexerces)
{
列表=新列表();
foreach(所选练习中的int i)
{
列表.添加(db.练习.查找(i));
}
db.Plans.Find(id).Exercises=list;
等待db.saveChangesSync();
返回操作(“索引”);
}
我确信这是错误的,我尝试的观点是:

使用(Html.BeginForm(“索引”、“计划”)) { @Html.AntiForgeryToken() foreach(模型练习中的var i) { @DisplayFor(modeleItem=>i.Level) @DisplayFor(modelItem=>i.Description) @DisplayFor(modelItem=>i.MoreDescription) @ActionLink(“编辑”,“编辑”,新的{id=i.id})| @ActionLink(“细节”,“细节”,新的{id=i.id})| | } @ActionLink(“Finish”、“AddExercises”) }
我在此视图中使用viewModel PlanExercise

您的复选框既没有
名称
属性,也没有
属性,因此无需提交任何内容。你需要

<input type="checkbox" name="selectedExercises" value="@i.id" />
并且表单需要是(假设控制器是
FinishController


并且该方法需要标记为
[HttpPost]
属性。

您的复选框既没有
名称
属性,也没有
属性,因此无需提交任何内容。你需要

<input type="checkbox" name="selectedExercises" value="@i.id" />
并且表单需要是(假设控制器是
FinishController


这个方法需要用
[HttpPost]
属性来标记。

我试过了,但是当我添加HttpPost属性时,这个方法似乎没有被调用,所以我想知道这个方法得到了什么(在方法头部的括号之间),好的,刚刚注意到您的表单也是错误的-它需要
@使用(Html.BeginForm(“AddExercises”,“Finish”)
(假设您的控制器名为
FinishConroller
)是的,您是对的,但现在它告诉我这一行有问题:foreach(selectedExercises中的int guid)什么问题(我猜不出来!)。为什么要调用
int
guid类型的值?值真的是
int
类型还是
Guid
类型?我不知道值应该是什么类型,这就是为什么我在这里。。。但是没有,guid这个词只是因为我复制了它。这是eror标题:对象引用未设置为对象的实例。这意味着我尝试过,但似乎当我添加httppost属性时,该方法甚至没有被调用,所以我认为该方法得到了什么(在该方法头部的括号之间)好吧,只是注意到您的表单也是错误的-它需要
@使用(Html.BeginForm(“AddExercises”,“Finish”)
(假设您的控制器名为
FinishConroller
)是的,您是对的,但现在它告诉我这行有问题:foreach(selectedExercises中的int-guid)什么问题(我猜不出来!)你为什么要调用一个类型为
int
guid的值?这些值真的是
int
的类型还是
guid
的类型?我不知道值的类型应该是什么,这就是为什么我在这里的原因…但是不,guid这个词只是因为我复制了它。这是eror标题:对象引用没有设置为实例物体的e,这是什么意思
<input type="submit" value="Save" />
@using (Html.BeginForm("AddExercises", "Finish"))