Kendo UI 网格的自定义 row/checkbox 模板

Custom row/checkbox template for Kendo UI grid

我正在尝试为包含复选框功能的 Kendo UI 网格创建自定义行模板。我创建了这样的网格:

@(Html.Kendo().Grid(Model.Users)
              .Name("usersGrid")
              .Columns(columns =>
              {
                  columns.Select().Width(50);
                  columns.Bound(c => c.UserName);
              })
              .DataSource(dataSource => dataSource
                  .Ajax()
                  .ServerOperation(false))
              .ClientRowTemplate(UsersClientTemplate))

具有生成这样的行模板的功能:

Func<Grid<User>, string> UsersClientTemplate = (grid) =>
{
    var id = Guid.NewGuid();
    return @"<tr data-uid='#:uid#' role='row'>" +
           "<td role='gridcell'>" +
           $"<input class='k-checkbox' data-role='checkbox' type='checkbox' id={id}>" +
           $"<label class='k-checkbox-label k-no-text' for={id}>​</label>" +
           "</td>" +
           "<td role='gridcell'>" +
           "<a href='/users/details/#:data.Id#'>#:data.UserName#</a>" +
           "</td>" +
           "</tr>";
};

问题是我不知道如何为每一行的模板生成唯一的 ID。如果我不在复选框 input 元素上包含 id 属性,在复选框 label 元素上不包含 for 属性,则 checkbox/row 选择不会工作。但是使用上面的函数,为每个行模板生成相同的 id,然后 checkbox/row 选择仅适用于第一行,显然。

执行此操作的更好方法是什么?

模板是在构建网格时生成的,因此如您所见,id 始终相同。您想要的是数据绑定,因此 kendo 将 id 替换为每条记录。我将我的实体密钥与前缀 "cb_" 用于复选框:

       $"<input class='k-checkbox' data-role='checkbox' type='checkbox' id='cb_#:uid#'>" +
       $"<label class='k-checkbox-label k-no-text' for='cb_#:uid#'>​</label>" +