2

通过 jquery ajax 调用提交数据时遇到了一个棘手的问题。基本上,使用 jquery动态添加到屏幕中的表单字段的表单值不会在批量保存命令上更新。

基本上我有一个网格列表,它显示保存到数据库的所有当前行,每列包含表单字段。然后我在页面顶部有一个表单,这是您典型的添加另一个详细信息表单。您键入您的值,按“添加”,这将通过 jquery json ajax 调用保存到数据库中,并且您的表单数据被添加并反映在列表表的新行中。(这部分有效)

我的问题在于当您希望更改新添加的 jquery 表行中的表单值时。按下保存按钮时,只会重新保存任何已构建的表格行。您的动态行表单数据不会保存。更新调用使用 jquery ajax 和 ASP.NET MVC 模型绑定。在“添加”上,我将一个 asp.net mvc“部分视图”返回到我的 jquery ajax 响应中,并且它被添加到使用$("#tablename tr:last").after(result).

如前所述,我已经推断出新的动态添加的行不会更新。我IList<Item>在我的 MVC 模型绑定列表中返回了一个集合到我的控制器操作方法,其中包含整个项目列表,减去新创建的 jquery 动态添加的表单字段行。这就是问题所在,也是为什么当您执行页面刷新时,行会回到初始添加时输入的原始表单值。

有什么想法为什么我IList<Item>的 's 不会包含这些动态添加的行?在 Firebug 中检查,他们在 name 属性中使用相同的命名约定,一切都应该没问题。

格雷厄姆。

5 月 1 日 11:00 GMT+10 更新:将模型绑定从 IList 更改为 FormCollection 时,我确实收到了这些值。我不想使用 FormCollection 而不是模型绑定,但是如果我可以通过 FormCol 正确获取它,为什么不使用 IList 模型绑定?我已经将数组条目与工作项进行了比较,它们都符合相同的标准和值。

4

3 回答 3

5

我不是 ASP 程序员,但我做了很多 jquery 工作。如果我正确理解您的问题,则您的动态生成的行不会绑定到将执行更新操作的回调函数。

您可以使用 jQuery 'live' 函数(正如 Wikidkaka 试图告诉您的那样)将动态生成的元素绑定到回调,也可以在 ajax 调用返回时触发的回调函数中手动绑定新创建的元素。

我建议使用(我相信)最新版本的 jQuery 中添加的本机实时功能。它将使您不必编写额外的行来手动绑定回调,并使代码维护更容易。

所以改变:

$('div.your-save-buttons').click(updateFunction);

$('div.your-save-buttons').live(updateFunction);
于 2009-06-05T00:02:34.070 回答
3

使用插件 livequery 来做你想做的事情。你可以在这里找到它 - http://docs.jquery.com/Plugins/livequery

这不适用于大多数动态添加的元素:

$("select something").onSomeEvent("do something");

但是使用 livequery 插件,您可以通过将 JS 代码更改为如下内容来使其工作:

$("select something").livequery('event name','do something');

于 2009-06-03T10:29:23.790 回答
0

如果您的模型上的属性是一个整数列表,您可以使用它IEnumerable<int>来获取自动模型绑定。这既适用于参数为 anIEnumerable<int>的 Action 方法,也适用于参数为 Model 且属性为 的 Action 方法IEnumerable<int>。例如,像这样:

<%= 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; }
}
于 2009-06-08T22:51:21.647 回答