2013-07-03 169 views
3

我是ASP.NET MVC的新手,需要一些帮助。我需要创建一个表单动态创建的表单。例如,假设我有一个名为Person的模型。该人拥有姓氏和名字。在表单中,我想让用户输入个人的名字和姓氏。我知道如何做到这一点,但我不知道如何做的是允许用户添加多个人,并提交一个表单。ASP.NET MVC4动态表单生成

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

我不知道是否有办法做到这一点,没有后背。或者回复我唯一的选择?

编辑:忘了提及我正在使用剃刀引擎。

感谢

+1

查看部分视图,您需要创建一个可枚举的模型和一个允许用户添加另一个人的局部视图。有很多关于SO和谷歌的信息可以帮助您使用代码示例。 –

+0

@NicholasKing,如果你有方便的链接,我将不胜感激。同时我会做一些搜索... – JMS10

+1

看看这个。我发现它非常有用http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ –

回答

3

不需要多个POST。你希望你的表单发送个人到你的行动。该行动将是这样

[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操作。只记得要保持索引有序。

1

菲尔哈克wrote an article在几乎你想要做什么。为了让它成为动态的(意思是它们可以有1到很多人),你必须通过附加一个单击事件到添加按钮来复制一行新的输入字段来做一些JavaScript操作。我首先建议先阅读该文章,以了解如何构建输入字段,以便在回发列表时填充。

3

史蒂文桑德森在他的博客中有一篇很好的文章......它不依赖于每个人的数字索引,以避免在中间删除一个时出现“漏洞”。

见这里的文章: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的代码...它就像一个魅力。