C# 对象属性MVC控制器

C# 对象属性MVC控制器,c#,asp.net-mvc,telerik,kendo-grid,C#,Asp.net Mvc,Telerik,Kendo Grid,我正在尝试创建一个可重用的网格,它将有一个选择勾选框,然后根据我发送的项目创建任意数量的列 我目前使用一个类来显示,该类有一个用于选择的bool和一个用于显示项目的对象 当我通过发送更新来设置是否选择了项时,项属性将作为{object}(在VS中的调试器中查看时) 是否可以将其强制转换/序列化为我可以使用的对象 我使用的是Telerik Kendo网格和数据源,Id和IsSelected填充得很好,但项没有填充 谢谢 选择项目视图模型 public class SelectOptionViewM

我正在尝试创建一个可重用的网格,它将有一个选择勾选框,然后根据我发送的项目创建任意数量的列

我目前使用一个类来显示,该类有一个用于选择的bool和一个用于显示项目的对象

当我通过发送更新来设置是否选择了项时,项属性将作为{object}(在VS中的调试器中查看时) 是否可以将其强制转换/序列化为我可以使用的对象

我使用的是Telerik Kendo网格和数据源,Id和IsSelected填充得很好,但项没有填充

谢谢

选择项目视图模型

public class SelectOptionViewModel
{
    public string Id { get; set; }
    public bool IsSelected { get; set; }
    public object Item { get; set; }
}
正在调用的控制器方法

public ActionResult UpdateSelectionItem([DataSourceRequest] DataSourceRequest request,SelectOptionViewModel selectOptions, int sessionId)
{

}
视图上的网格

$("#grid").kendoGrid({
            dataSource: new kendo.data.DataSource({
                autoSync: true,
                transport: {
                    read:  {
                        url: "@Url.Action("GetSelectionItem", "MultiSelect", new { sessionId = Model.SessionId })",
                        type: "post"
                    },
                    update: {
                        url: "@Url.Action("UpdateSelectionItem", "MultiSelect", new { sessionId = Model.SessionId })",
                        contentType: 'application/json',
                        type: "post",
                        dataType: 'json'
                    },
                    parameterMap: function(data, type) {
                        return kendo.stringify(data);
                    },
                    dataType: "json",
                    contentType: "application/json; chartset=utf-8",
                    type: "GET"
                },
                schema: {
                    data: "Data",
                    total: "Total",
                    errors: "Errors",
                    model: { id: "Id" }
                },
                pageSize: 10,
                serverPaging: true,
                serverFiltering: true,
                serverSorting: true
            }),
            navigatable: true,
            columns : GetColumns(),
            height: 550,
            pageable: {
                pageSize: 2
            },
            sortable: {
                mode: "multiple",
                allowUnsort: true
            },
            filterable : true,
            pageable: {
                buttonCount: 5
            }
        }).on('click', '.chkbx', function () {
            var checked = $(this).is(':checked');
            var grid = $('#grid').data().kendoGrid;
            grid.closeCell();
            var dataItem = grid.dataItem($(this).closest('tr'));
            var col = $(this).closest('td');
            grid.editCell(col);
            dataItem.set(grid.columns[col.index()].field, checked);
            grid.closeCell(col);
        });

function GetColumns()
{
    var columnList = @Html.Raw(Json.Encode(Model.Columns))
    return columnList;
}
更新请求时的标题:

{"Id":"1001","IsSelected":true,"Item":{"Code":"1001","Description":"Desc"}}

显示
GetColumns()的代码
将其添加到网格底部,这只允许我发送列信息,以便动态添加itemwell
列的列。字段
应为“Item.code”和“Item.Description”是此位工作正常,网格显示良好,我可以单击复选框,它将调用update方法,但当我调试到该方法中时,作为已编辑的SelectOptionViewModel的一部分发送的Item属性为{object}。正如您在更新请求中看到的,所有属性都作为请求的一部分发送,您可以看到该项被设置为具有Code和description属性。您可以将公共对象项{get;set;}替换为公共SomeClass项{get;set;},然后声明类SomeClass{public string Code{get;set;}公共字符串说明{get;set;}}