我正在尝试将模型绑定到网格并返回选择。我能够传递模型并显示我期望的数据以及选择的复选框。然而,当我尝试将模型传递回控制器时,我似乎只是回到最初传递到视图中的相同模型而没有任何选择更改。
查看:
@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标志的所有默认值。我不确定我在忽视什么 - 我在网上看了几个例子,但我担心我对剑道的经验不多,所以我不确定出了什么问题。非常感谢任何建议。
答案 0 :(得分:0)
您能否确认点击处理程序正在运行?我猜是的。
表单发布原始模型,因为value="@(Json.Encode(Model))"
是在页面渲染时构建的,而不是在页面视图运行时。
尝试更改提交按钮以执行网格saveChanges
$('#grid').data("kendoGrid").saveChanges().
saveChanges调用数据源同步。
你也可以使用工具栏,它们可以为你做更多的管道工作。有关详细信息,请参阅demos。