0

我是 ASP.Net MVC 的新手。我正在尝试通过开发在线教育系统来学习 MVC3。我面临将由 javascript 创建的文本框和下拉列表的值从视图传递到使用视图模型的控制器的问题。我有一个学生添加其当前资格列表的场景。 在此处输入图像描述

在上图中,我试图解释我的问题。

起初只有一排教育会在视图页面中查看。当学生单击添加按钮时,将在其下方添加一个新行,依此类推。

我创建了一个 StudentEducation ViewModel。我还研究了几个类似这样的堆栈溢出问题。总之,我发现创建了一个通用列表属性,并通过循环创建视图中的控件。但我的问题是起初列表中没有对象,即我无法设置资格学生将添加的数量。

所以请在这方面帮助我。

4

2 回答 2

0

假设您有一个名为的 ViewModelStudentEducation 在您的帖子操作中,您需要一个List<StudentEducation>

[HttpPost]
public Action MyAction(List<StudentEducation> students)
{
 ...
}

您还需要一个 get Action 来获取视图。起初它是空的,不包含任何记录

public Action MyAction()
{
   //here, initialize your 
   //List<StudentEducation> vm = new List<StudentEducation>();
   // and send it to view like
   return View(vm);
}

您还需要一个强类型视图。在您看来,您需要迭代模型并创建列表项,例如

@model IEnummerable<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"是最重要的。如果您使用此模式中的名称创建列表 HTML,那么您将List<Studenteducatio>在表单提交时填写

于 2013-07-27T10:02:31.203 回答
0

您基本上需要模型绑定到列表。您通过 JavaScript 添加到表中的每个新行都必须将正确的 Id-s 设置为 html 输入。

我曾经遇到过同样的问题,Phil Haack 的这篇文章帮助我解决了这个问题。

我最终生成了一个新行(尽管在我的情况下它是一个可以多次输入的整个子表单)模板,以便在用户按下“添加”按钮时使用。我还实现了一个 JavaScript 帮助函数,它计算要插入的行的正确序列号。我不需要更改控制器中的任何内容,模型绑定就可以了。

于 2013-07-27T09:59:07.790 回答