【问题标题】:Post Kendo grid data on form submit在表单提交上发布 Kendo 网格数据
【发布时间】:2016-06-20 06:44:17
【问题描述】:

我正在寻找可用于在表单提交时将剑道网格数据发布到控制器的代码。 请注意:我不能使用 JSON post,因为我必须使用网格数据来创建一个 excel 文件。 我在我的 jquery 中尝试做的事情:这里 UserRegistrationForm 是我的表单名称,其中包含网格。

$("#UserRegistrationForm").submit();

您能否建议我的控制器操作应该如何获取网格的值。

【问题讨论】:

  • 有这方面的消息吗?

标签: excel forms kendo-ui kendo-grid


【解决方案1】:

为此,我通常在提交表单之前使用网格数据生成隐藏字段。一个简单的方法:

$("#my-form").submit(function() {
    var grid = $("#grid").data("kendoGrid"),
        data = grid.dataSource.data(),
        columns = grid.options.columns.map(function(item) { return item.field; }),
        html = "";

    for (var i = 0; i < data.length; i++) {
        var fields = Object.keys(data[i]);

        for (var n = 0; n < fields.length; n++) {
            if (columns.indexOf(fields[n]) > -1) {
                html+= "<input type='hidden' name='" + fields[n] + "[" + i + "]' value='" + data[i][fields[n]] + "' />";
            }
        }
    }

    $("#hidden-fields").empty().append(html);
});

Working Demo

这将在表单内的 div(#hidden-fields) 内产生一组隐藏字段。它的名字是这样的:

name="PropertyA[0]" value="valueOfA0"
name="PropertyB[0]" value="valueOfB0"
name="PropertyA[1]" value="valueOfA1"
name="PropertyB[1]" value="valueOfB1" and so on...

这很容易适合 ASP.Net MVC 列表参数,或者如果是 ViewModel 中的列表,只需在属性名称之前添加 ViewModel 的名称,例如ViewModel.PropertyA[0]。对于 PHP,它将产生一个数组,例如$_POST["PropertyA"]。我不确定其他 API 语言。

【讨论】:

  • 请注意:虽然隐藏字段解决方案会起作用(我已经做到了),但它不适用于大型数据集,如果您使用网格分页,则根本不起作用行立即呈现。
  • @TheDreadPirateStephen “不适用于大型数据集”是什么意思?是否存在浏览器或 api 无法很好处理的一定数量的数据?如果您在网格中设置了服务器分页,确实,您无法处理所有数据,因为它没有完全加载,但如果它没有加载,实际上没有更新它的目的,因为它没有被更改,正确的?顺便说一句,如果您的网格在客户端分页,则上面的 sn-p 将正常工作,因为数据已完全加载check this
  • 即使在客户端,一次也只能将一页数据呈现为 html。剩下的数据只是dataSource。因此,未呈现的行也不会呈现其隐藏的输入字段,因此不会在表单出现时发布。然后,您将要求您的页面大小足够大以呈现最大的数据集大小,这最终会呈现过多的 html,并且浏览器将开始突突。在您的示例中,如果您要添加隐藏的输入渲染,然后发布表单(表单内有网格),则只会发布当前页面的数据。
  • 看看telerik.com/support/code-library/…。我现在使用它的一个变体来保存我的所有网格,因为我不喜欢将每个集合保存在单独的请求中的内置方式,从而阻止事务处理。您可以使用此技术将网格数据与表单数据合并,并使用 ajax post 而不是 $form.submit() 一次性发布。如果您希望我详细说明,我将根据 Telerik 代码库条目发布我目前使用的一些代码的完整答案。
  • 抱歉,我刚刚意识到您在提交期间添加了隐藏字段not 在渲染期间(这是telerik支持过去发布的一种技术,并且可能有性能问题)。
猜你喜欢
  • 2013-11-25
  • 2017-05-24
  • 2019-01-19
  • 2018-06-08
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多