Telerik Kendo MVC Grid子模板从父级获取默认值

时间:2014-06-04 19:57:49

标签: c# razor telerik kendo-asp.net-mvc

您好我正在使用Kendo MVC Razor子模板进行编辑,我需要为父项设置项ID的默认值。如果我尝试设置的属性是一个字符串,它可以工作,但如果它是一个int则不行。请参阅下面代码中的注释。如果无法做到这一点,有人可以建议一个解决方法吗? 感谢。

@using Harpoon.DomainLogic
@using Kendo.Mvc.UI

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@(Html.Kendo().Grid<UserStandardCodeType>().Name("grid")
.DataSource(dataSource => dataSource.Ajax().Read(read => read.Action("GetUserStandardCodesTypes_Ajax", "UserStandardCode")))
.Columns(columns =>
  {
      columns.Bound(usct => usct.InternalCode);
      columns.Bound(usct => usct.PresentationName);
      columns.Bound(usct => usct.Description);
  })
.ClientDetailTemplateId("client-template")
)

<script id="client-template" type="text/x-kendo-template">
    @(Html.Kendo().Grid<UserStandardCode>().Name("grid_#=Id#") // make sure the Name is unique
          .Columns(columns =>
          {
              columns.Bound(usc => usc.InternalCode);
              columns.Bound(usc => usc.PresentationName);
              columns.Bound(usc => usc.Description);
              columns.Bound(usc => usc.IsEnabled);
              columns.Command(commands =>
              {
                  commands.Edit(); 
                  commands.Destroy(); 
              }).Title("Commands").Width(200);
          })
          .DataSource(dataSource => dataSource.Ajax()
              .Read(read => read.Action("GetUserStandardCodes_Ajax", "UserStandardCode", new { CodeTypeId = "#=Id#" }))
              .PageSize(2)
              .Model(model =>
              {
                  model.Field(usc => usc.CodeTypeId).DefaultValue("#=Id#"); // this line fails converting from string to int
                  model.Id(usc => usc.Id); // specify the unique id column
              })
              .Create(create => create.Action("CreateUserStandardCode_Ajax", "UserStandardCode"))
              .Update(update => update.Action("UserStandardCodes_Ajax", "UserStandardCode"))
              .Destroy(destroy => destroy.Action("UserStandardCodes_Ajax", "UserStandardCode"))
          )
          .Pageable()
          .ToolBar(toolbar => toolbar.Create()) 
          .Editable(editable => editable.Mode(GridEditMode.InLine))
          .ToClientTemplate()
          )
</script>

2 个答案:

答案 0 :(得分:4)

尝试添加JavaScript函数来处理Save事件

.Events(e => e.Save("save"))

为了设置父ID:

function save(e) {
  var parentGrid = $("#grid").data("kendoGrid");                        
  var parentRow = e.container.closest(".k-detail-row").prev(".k-master-row");                        
  var parentDataItem = parentGrid.dataItem(parentRow);

  e.model.set("CodeTypeId", parentDataItem.Id);
}

答案 1 :(得分:0)

您可以尝试使用parseInt的JavaScript函数将字符串转换为int。 Kendo UI&#34; DefaultValue&#34;与ClientTemplate的工作方式类似。有一些额外的逻辑可以检查null,因此您不会收到JavaScript错误。

// Use JavaScript parseInt to transform the field from string to int
model.Field(usc => usc.CodeTypeId).DefaultValue("#= Id != null ? parseInt(Id) : 0 #");