gpt4 book ai didi

jquery - 将 jqGrid 行数据从 View 提交到 Controller - 什么方法?

转载 作者:行者123 更新时间:2023-12-01 00:15:22 26 4
gpt4 key购买 nike

我一直致力于使用 this question 中的一般思想将 jqGrid 中的所有行提交到操作方法。以及 jqGrid Wiki 上的评论中的一些代码。本质上,在提交时,我希望所有行数据返回到 Controller ,以便我可以保留它。我尝试使用隐藏字段来存储所有行数据,但 Controller 似乎永远无法获取所有内容,只能获取网格中最后编辑的单元格。所以我改用了 ajax 方法,但无论我尝试什么,我都无法让 ajax POST 呈现为 JSON。这是我现在所拥有的:

$("#submitButton").click(function () {
$("#awesomeGrid").jqGrid('resetSelection');
var gridRows = $("#awesomeGrid").jqGrid('getRowData');
var rowData = new Array();
for (var i = 0; i < gridRows.length; i++) {
var row = gridRows[i];
rowData.push($.param(row));
}
var dataToSend = JSON.stringify(rowData);
$.ajax({
url: '@Url.Action("UpdateAwesomeGridData")',
type: 'POST',
data: { gridData: dataToSend },
dataType: 'json',
success: function (result) {
alert('success');
}
});
return true;
});

还有我的 Controller 方法签名:

[HttpPost]
public ActionResult UpdateAwesomeGridData(string gridData)

我尝试将 gridData 参数从 string 更改为 string[]object[] 到各种各样的事情,但似乎没有任何效果。如果我将其保留为 string,我会得到数据,但格式很奇怪,如下所示(替换了列名称):


gridData=["Id=1&Field1=1945&Field2=0&Field3=0&Field4=1&Field5=Some+string+value&Field6=&Field7=&Field8=&Field9s=","Id=2&Field1=1945&Field2=0&Field3=0&Field4=2&Field5=另一个+string+值&Field6=&Field7 =&Field8=&Field9s=","Id=3&Field1=1945&Field2=0&Field3=0&Field4=3&Field5=Yet+another+string&Field6=&Field7=&Field8=&Field9s=","Id=4&Field1=1945&Field2=0&Field3=0&Field4=4&Field5=Final+string&Field6 =&Field7=&Field8=&Field9s="]

我从 Fiddler 中得到了这个,并且作为记录,当我摆弄它时,JSON 选项卡没有显示任何请求。有没有办法可以 JSON 化这个数组并在一次调用中发送它?我的操作方法中的参数是什么类型?

编辑 - 解决方案

对于像我一样愚蠢的其他人,以下是我让它发挥作用的方法:

首先,根据 Oleg 的建议,我将 loadonce: true 添加到 jqGrid 定义中。然后,将我的提交按钮功能更改如下:

$("#submitButton").click(function () {
var griddata = $("#awesomeGrid").jqGrid('getGridParam', 'data');
var dataToSend = JSON.stringify(griddata);
$.ajax({
url: '@Url.Action("UpdateAwesomeGridData")',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: dataToSend,
dataType: 'json',
success: function (result) {
alert('success: ' + result.result);
}
});
return true;
});

然后,更改了我的 Controller 方法签名:

public ActionResult UpdateAwesomeGridData(IEnumerable<GridBoundViewModel> gridData)

希望这对将来的人有帮助。

最佳答案

我看到你有很多问题。

第一个问题是您使用 $.param(row)并填充数组 rowData带有编码的(???!!!)数据。我认为正确的代码应该包含直接发布从 getRowData 返回的数据:data: { gridData: gridRows } 。在服务器端您可以使用 UpdateAwesomeGridData(string gridData)然后转换gridDataList<List<string>>例如通过

JavaScriptSerializer serializer = new JavaScriptSerializer();
var myListOfData = serializer.Deserialize<List<List<string>>>(gridData);

我想退后一步问一个问题:为什么需要将数据发送到已有的服务器?如果您出于某种目的需要网格中的所有数据,您只需使用生成数据的 Controller 的相同操作即可,因此您将在服务器上拥有相同的数据

仅在一种情况下才需要将数据发送到服务器:您使用了 loadonce: true ,在本地修改数据,并且在修改结束时,您需要将所有更改的数据发送到服务器。在使用 getRowData 的情况下这不是最好的选择,因为它仅从当前页面获取数据。要获取所有数据,您最好使用 getGridParam("data") .

关于jquery - 将 jqGrid 行数据从 View 提交到 Controller - 什么方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10744694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com