将模型绑定到网格并回发选择

时间:2017-12-07 22:13:50

标签: c# asp.net-mvc kendo-ui kendo-grid

我正在尝试将模型绑定到网格并返回选择。我能够传递模型并显示我期望的数据以及选择的复选框。然而,当我尝试将模型传递回控制器时,我似乎只是回到最初传递到视图中的相同模型而没有任何选择更改。

查看:

@model ExViewModel

@(Html.Kendo().Grid(Model.Classes)
.Name("grid")
.Columns(columns =>
{
    columns.Bound(c => c.IsChecked).ClientTemplate("<input type='checkbox' #= IsChecked ? checked='checked':'' # class='chkbx' />" + "<input type='hidden' name='id' value='#= IsChecked#' />").Width(50);
    columns.Bound(c => c.Name).Width(175);
    columns.Bound(c => c.Details).Width(175);
})
.Scrollable().Groupable().Sortable().Filterable()
.DataSource(dataSource => dataSource
            .Ajax()
            .Batch(true)
            .ServerOperation(false)
           )
)

@using (Html.BeginForm("CallNext", "Home", FormMethod.Post))
{
    <input hidden="hidden" id="model_output" name="model_output" value="@(Json.Encode(Model))" />
    <input id="btnSubmit" class="btn btn-primary" type="submit" value="Next >" />
}

<script>
    $(function () {
        $('#grid').on('click', '.chkbx', function () {
            var checked = $(this).is(':checked');
            var grid = $('#grid').data().kendoGrid;
            var dataItem = grid.dataItem($(this).closest('tr'));
            dataItem.set('IsChecked', checked);
        })
    })
</script>

控制器:

[HttpPost]
public ActionResult CallNext(string model_output)
{ 
 . . . 
}

使用上面的内容,我在控制器中返回的model_output具有Classes的IsChecked标志的所有默认值。我不确定我在忽视什么 - 我在网上看了几个例子,但我担心我对剑道的经验不多,所以我不确定出了什么问题。非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

您能否确认点击处理程序正在运行?我猜是的。

表单发布原始模型,因为value="@(Json.Encode(Model))"是在页面渲染时构建的,而不是在页面视图运行时。

尝试更改提交按钮以执行网格saveChanges

$('#grid').data("kendoGrid").saveChanges().

saveChanges调用数据源同步。

你也可以使用工具栏,它们可以为你做更多的管道工作。有关详细信息,请参阅demos