通过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; }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top