3

我是 ASP.NET MVC 的新手,需要一些帮助。我需要创建一个动态创建表单的表单。例如,假设我有一个名为 Person 的模型。Person 有名字和姓氏。在表单中,我希望允许用户输入此人的名字和姓氏。我知道怎么做,但我不知道怎么做是允许用户添加多个人并提交一个表单。

在页面(视图)的初始加载时,默认情况下会显示两个空文本框(用于名字和姓氏)。我还将有一个添加按钮,允许用户向表单添加另一行并为第二个人显示相同的 2 个文本框。现在,如果用户提交它,它将有 2 个文本框用于名字,2 个文本框用于姓氏。

我不知道是否有办法在没有回帖的情况下做到这一点。还是发回我唯一的选择?

编辑:忘了提到我正在使用 Razor 引擎。

谢谢

4

3 回答 3

3

Steven Sanderson 在他的博客中对此有一篇非常好的文章……它不依赖于每个人的数字索引来避免在删除中间的一个时出现“漏洞”。

请参阅此处的文章:http: //blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

然后,您将需要验证:http: //blog.stevensanderson.com/2010/01/28/validating-a-variable-length-list-aspnet-mvc-2-style/

我在 MVC 3 和 4 中使用此代码......它就像一个魅力。

于 2013-07-03T17:14:34.233 回答
3

不需要多个 POST。您希望您的表单向您的操作发送一个Person 数组。动作将类似于

[HttpPost]
public ActionResult AddPeople(Person[] people){ ... }

为此,您必须枚举视图上的输入字段。它们必须被索引,从 0 开始并相应地递增,例如:

@using(Html.BeginForm("AddPeople","TheController", FormMethod.Post))
{
  <input type="text" name="people[0].FirstName" />
  <input type="text" name="people[0].LastName" />
  ...
  <input type="text" name="people[1].FirstName" />
  <input type="text" name="people[1].LastName" />
  ...
  <input type="text" name="people[n].FirstName" />
  <input type="text" name="people[n].LastName" />
}

您必须使用 javascript 添加新字段,并进行简单的 DOM 操作。只要记住保持索引的顺序。

于 2013-07-03T14:41:53.447 回答
1

Phil Haack写了一篇关于你想做什么的文章。为了让它是动态的(意味着他们可以一对多的人到列表中),您必须通过将点击事件附加到添加按钮来复制输入字段的新行来进行一些 JavaScript 操作。我首先建议先通读那篇文章,以了解您需要如何构建输入字段,以便在您回发时填充列表。

于 2013-07-03T14:37:21.533 回答