首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ASP.NET MVC中实现表单数量的动态变化?

如何在ASP.NET MVC中实现表单数量的动态变化?
EN

Stack Overflow用户
提问于 2009-10-15 22:42:59
回答 1查看 175关注 0票数 1

我有一个Person实体,它包含一组"Education“实体。我想要的是从表单中收集"N“个Education条目。此"N“由”添加更多教育信息“和”删除教育信息“按钮控制。

在开始时,有一个空表单,它将收集一个Education条目。("person“对象存储在session中,最初有一个空的教育实体,我用这个"person”对象调用View )

如果用户单击"Add More Education Information“按钮,则添加另一个表单(以获取另一个教育信息,即来自另一个大学或另一个学位)我将另一个教育对象添加到"person”中,并再次调用view(person)

这可以正常工作,但旧数据会丢失。更好的说法是,表单中的数据没有映射到教育实体,即使我调用TryUpdateModel(person)也会丢失。每次我点击“添加更多教育信息”按钮,所有以前输入的数据都会丢失,所有表单都会变为空。

问:有没有更好的方法来解决这类问题(动态改变表单的数量)?或者,我应该进行哪些更改以保留旧数据?

谢谢。

我希望我能解释我的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-15 14:48:56

我认为您最好扩展单个表单,并让它返回一个实体数组。也就是说,让您的第一个表单使用如下ids:

代码语言:javascript
复制
 <%= Html.Hidden("Schools.index", 0) %>
 <%= Html.TextBox("Schools[0].Name") %>
 ...

然后,添加具有新索引的新元素。

代码语言:javascript
复制
 <input type="hidden" id="Schools_index" name="Schools.index" value="1" />
 <input type="text" id="Schools[1]_Name" name="Schools[1].Name" />
 ...

并将它们作为集合接收。

代码语言:javascript
复制
 public ActionResult AddEducation( Person person, School[] schools )
 {
 }

这将使您能够一次性提交所有信息,而不必担心部分提交以及如何处理不完整的提交。

请注意,您的javascript必须找到当前的最大索引,才能知道新元素的名称/ids。

代码语言:javascript
复制
$('#addSchooButton').click( function() {
     var index = $('#form').find('[name=Schools.index]:last').attr('value') + 1;
     $('<input type="text" id="Schools[' + index + ']_Name" name="Schools[' + index + '].Name" />').appendTo( '#form' );
     ...
});

实际上,您可能会创建一个完整的容器--可能是克隆一个现有的容器,并根据下一个索引值将克隆中的In替换为适当的in。

有关更多信息,请参考Phil Haack在model binding to a list上的文章。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1572843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档