2013-08-01 184 views
1

我正尝试使用kendo ui mvc包装网格绑定到对象列表。如何将kendo ui mvc网格绑定到对象列表

此外,我将复选框添加到每行的第一列,网格是包装在窗体中。然后,我想在提交时利用默认模型绑定(顺序或非顺序)列表。

我有写是被索引的HiddenForCheckBoxFor辅助方法的问题。

如果我写的表格布局自己会是这样的:

<table> 
    <tbody> 
     @for (var i = 0; i < Model.Count; i++) 
     { 
      <tr> 
       <td> 
        <input type="hidden" name="Index" autocomplete="off" value="@i" /> 
        @Html.HiddenFor(m => Model[i].Id) 
        @Html.CheckBoxFor(m => Model[i].Selected) 
       </td> 
       ... 

这将产生以下HTML输出。

<input type="hidden" name="Index" autocomplete="off" value="0" /> 
<input id="[0].Id" name="[0].Id" type="hidden" value="1234" /> 
<input id="[0].Selected" name="[0].Selected" type="checkbox" value="true" /> 
<input name="[0].Selected" type="hidden" value="false" /> 

这怎么可能用剑道UI MVC电网包装服务器端绑定?

我尝试使用在网格外定义的计数器,并在.RowAction和绑定列内增加它,但混合结果没有给我想要的结果。

var counter = 0; 
@(Html.Kendo().Grid(Model) 
    .Name("grid") 
    .Columns(columns => 
    { 
     columns.Bound(c => c.Id) 
      .Template(
       @<text> 
        <input type="hidden" name="Index" autocomplete="off" value="@counter" /> 
        @Html.HiddenFor(m => Model[counter].Id) 
        @Html.CheckBoxFor(m => Model[counter].Selected) 
       </text>) 
       ... 

我的问题是增加计数器。也许有更好的解决方案?

我做的另一个尝试是自己编写table html,然后应用javascript网格绑定$(“grid”).kendoGrid(...)。然而,然后我放弃了在我的tr/td元素上动态定义css类的能力。

回答

2

尝试这样的(另):

var counter = -1; 
@(Html.Kendo().Grid(Model) 
    .Name("grid") 
    .Columns(columns => 
    { 
     columns 
      .Bound(c => c.Id) 
      .Template(
       @<text> 
        @{counter++;} 
        <input type="hidden" name="Index" autocomplete="off" value="@counter" /> 
        @Html.HiddenFor(m => m[counter].Id) 
        @Html.CheckBoxFor(m => m[counter].Selected) 
       </text>); 

     ... some other columns 
    } 
) 
+0

作品以及使用递增计数器@ {计数器++;}到底柱。我也可以从-1开始递增,并为第一列的第一个元素添加@ {counter ++;},从而摆脱空结束列 – David

+0

是的,好点。随时用这个更好的方法更新我的答案。 –

相关问题