动态表行没有通过jquery ajax调用更新
-
03-07-2019 - |
题
通过jquery ajax调用提交数据时有点毛茸茸的问题。基本上,使用jquery 动态添加到屏幕的表单字段的表单值不会在批量保存命令上更新。
基本上我有一个网格列表,显示保存到数据库的所有当前行,每列包含表单字段。然后我在页面顶部有一个表单,这是典型的添加另一个详细信息表单。您键入值,按<!>“添加<!>”;这将通过jquery json ajax调用保存到数据库中,并且您的表单数据将添加并反映在listing表中的新行中。 (此部分有效)
我的问题在于您希望在新添加的jquery表行中更改表单值。按下保存按钮时,只会重新保存任何已构建的表格行。您的动态行表单数据不保存。更新调用使用jquery ajax和ASP.NET MVC模型绑定。在<!> quot; add <!> quot;我正在返回一个asp.net mvc <!> quot; partial view <!> quot;到我的jquery ajax响应,并使用$("#tablename tr:last").after(result)
将其添加到网格列表中。
我已经推断出,如上所述,新动态添加的行不会更新。我在我的MVC模型绑定列表中返回了一个IList<Item>
集合到我的控制器操作方法,该方法包含整个项目列表,减去新创建的jquery动态添加表单字段行。这是问题所在,当您执行页面刷新时,行将返回到初始添加时输入的原始表单值。
为什么我的<=>不会包含这些动态添加的行的任何想法?在Firebug中检查他们在name属性中使用相同的命名修道院,一切都应该没问题。
格雷厄姆。
更新1 5月11:00 GMT + 10:我确实在将模型绑定从IList更改为FormCollection时收到了值。我不想使用FormCollection而不是模型绑定,但是如果我能通过FormCol正确地获取它,那么问题就是问题,为什么不使用IList模型绑定器?我已将数组条目与工作项进行比较,它们都符合相同的标准和值。
解决方案
我不是ASP程序员,但我做了很多jquery工作。如果我正确理解您的问题,则动态生成的行不会绑定到将执行更新操作的回调函数。
您可以使用jQuery“live”函数将动态生成的元素绑定到回调(正如Wikidkaka试图告诉您的那样),或者您可以在ajax触发的回调函数中手动绑定新创建的元素呼叫返回。
我建议使用在(我相信)最新版本的jQuery中添加的本机实时函数。它将使您不必编写额外的行来手动绑定回调并使代码维护更容易。
所以改变:
$('div.your-save-buttons').click(updateFunction);
到
$('div.your-save-buttons').live(updateFunction);
其他提示
将插件livequery用于您要执行的操作。你可以在这里找到它 - http://docs.jquery.com/Plugins/livequery
这对大多数动态添加的元素不起作用:
$("select something").onSomeEvent("do something");
但是使用livequery插件,您可以通过将JS代码更改为以下内容来使其工作:
$("select something").livequery('event name','do something');
如果Model上的属性是整数列表,则可以使用IEnumerable<int>
获取自动模型绑定。这适用于参数为<=>的Action方法和参数为具有<=>属性的Model的Action方法。例如,像这样:
<%= Html.Hidden("myField", 1) %>
<%= Html.Hidden("myField", 1) %>
和
public ActionResult Update(IEnumerable<int> myField) { }
或
public ActionResult Update(MyModel myModel) { }
public class MyModel {
public IEnumerable<int> myField { get; set; }
}