使用Kendo UI网格通过ajax将表单数据发送到控制器

时间:2016-02-29 17:41:00

标签: asp.net-mvc kendo-ui

我正在尝试通过kendo ui网格将模型数据从表单发送到控制器。我还没有找到任何帮助。

  1. 我可以对表单数据进行serilize并将其作为参数发送吗?
  2. 这是我的网格代码,

    enter@(Html.Kendo().Grid<LookupGridResults>()
                                    .Name("grid")
    
                                    .Columns(columns =>
                                    {
                                        columns.Bound(p => p.FirstName).Width(225);
                                        columns.Bound(p => p.LastName).Width(225);
                                        columns.Bound(p => p.City).Width(225);
                                        columns.Bound(p => p.County).Width(225);
                                        columns.Bound(p => p.State).Width(225);
                                        columns.Bound(p => p.Zip).Width(225);
                                    })
                                    .Pageable()
                                    .Sortable()
                                    .Scrollable()
                                    .HtmlAttributes(new { style = "height:550px;" })
                                    .DataSource(dataSource => dataSource
                                        .Ajax()
                                        .PageSize(50)
                                        .ServerOperation(true)
                                        .Read(read => read.Action("ReadLeads", "LeadsManagement"))
    
                                     )
    
                                        ) 
    

    如果可能,我想尝试将此作为对控制器的ajx调用。

1 个答案:

答案 0 :(得分:1)

您可以将grid.dataSource.read方法与数据对象参数(http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#methods-read)一起使用:

var optionalData = { foo: 42, bar: "baz" };
dataSource.read(optionalData);

或者,如果您想要自定义操作请求,则有未记录的dataSource.success方法:

$.ajax({
    type: "POST",
    url: '...',
    data: {....},
    success: function (data) {
        //data is array of grid items to rebind
        grid.dataSource.success(data);
    }
});

<强>更新

从表单收集数据我使用的是jquery扩展程序serializeObjecthttps://stackoverflow.com/a/1186309/5575536):

$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

接下来的用法是:

var data = $('#form').serializeObject();
//or
var data = $('#container').find('input,select,textarea').serializeObject();