我是ASP.Net MVC的新手。我正试图通过开发一个在线教育系统来学习MVC3。使用视图模型将javascript创建的文本框和下拉列表的值从视图传递给控制器时,我面临着问题。我有一个方案,学生添加其当前资格的清单。

在上面的图片中,我试图解释我的问题。
一开始,只有一行教育将查看网页。当学生点击“添加”按钮时,会在下面添加一个新行,以此类推。
我创建了一个StudentEducation ViewModel。我还研究了类似于这种堆栈溢出的几个问题。总之,我发现创建了一个泛型列表属性,并通过循环创建视图中的控件。但我的问题是,一开始名单上没有对象,即我不能设定资格学生会加多少。
所以请在这方面帮助我。
发布于 2013-07-27 10:02:31
假设您有一个名为ViewModel的StudentEducation。
在您的后动作中,您需要一个类似的List<StudentEducation>
[HttpPost]
public Action MyAction(List<StudentEducation> students)
{
// ...
}您还需要一个get操作来获取视图。一开始它将是空的,并且不会包含任何记录。
public Action MyAction()
{
// here, initialize your
// List<StudentEducation> vm = new List<StudentEducation>();
// and send it to view like
return View(vm);
}您还需要一个强类型视图。在视图中,您需要迭代模型并创建如下所示的列表项
@model IEnumerable<StudentEducation>
for (var i = 0; i < @Model.count; i++)
{
@Html.TextBoxFor(o => o[i].PropertyName)
}有趣的是。如果生成的HTML标记如下
<input type="text" value="something" name="[1].PropertyName" />在这里,name="[1].PropertyName"是最重要的事情。如果您在此模式中创建具有名称的列表List<Studenteducatio>,则在表单提交时将得到一个填充的HTML。
发布于 2013-07-27 09:59:07
你需要基本的模型-绑定到一个列表。通过JavaScript添加到表中的每一行都必须将正确的Id-s设置为html输入。
有一段时间,我遇到了同样的问题,菲尔·哈克( Phil )的“围棋与这”( go and )一篇文章帮助我解决了这个问题。
最后,我生成了一个新的行(虽然在我的例子中,它是一个可以多次输入的完整子表单)模板,当用户按下"Add“按钮时使用。我还实现了一个JavaScript助手函数,它计算要插入的行的正确序列号。我不需要改变控制器中的任何东西,模型绑定刚刚生效。
https://stackoverflow.com/questions/17895820
复制相似问题