在表单提交上发布Kendo网格数据

时间:2016-06-20 06:44:18

标签: excel forms kendo-ui kendo-grid

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

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

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

1 个答案:

答案 0 :(得分:0)

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

$("#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语言。