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

Posted

技术标签:

【中文标题】Telerik Kendo MVC Grid 子模板从父模板获取默认值【英文标题】:Telerik Kendo MVC Grid child template get default value from parent 【发布时间】:2014-07-25 15:14:48 【问题描述】:

您好,我正在 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>

【问题讨论】:

【参考方案1】:

尝试添加一个 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);

【讨论】:

我通过将最后一行更改为 [code]e.model.CodeTypeId = parentDataItem.id; //注意id是小写的 这正是我需要听到的。除了它对我不起作用之外,我认为因为我使用的是弹出式编辑而不是内联。我不得不将e.container 更改为e.sender.table。然后它起作用了:)【参考方案2】:

您可以尝试使用 parseInt 的 JavaScript 函数将字符串转换为 int。 Kendo UI “DefaultValue”的工作方式与 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 #"); 

【讨论】:

嗨 piercove 感谢您的建议,但是当我尝试它时,我仍然遇到关于尝试将字符串转换为 int 的相同异常

以上是关于Telerik Kendo MVC Grid 子模板从父模板获取默认值的主要内容,如果未能解决你的问题,请参考以下文章

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

Telerik Kendo UI ASP.NET MVC Grid - 已保存数据项的事件处理

Kendo Grid MVC - 服务器导出 Excel 日期时间字段(自定义格式)

Telerik Kendo Grid 重新绑定问题

Telerik Kendo MVC 文本框多行模式

在Telerik Kendo UI MVC网格中添加“mailto:”链接