当使用ASP MVC帮助程序持久化_if_渲染时,Telerik Kendo UI网格错误地序列化工具栏按钮

时间:2015-05-08 15:15:53

标签: javascript asp.net-mvc kendo-ui telerik kendo-grid

请注意:在持续并恢复网格状态之前,所有内容都按预期完美运行。所以请不要在那里搜索错误......

使用ASP MVC助手渲染网格:

.ToolBar(toolbar => toolbar.Create().Text("Add new role"))

使用标准语句持久保存网格客户端时:

    grid = $("#grid").data("kendoGrid");
    data = kendo.stringify(grid.getOptions());

数据部分无效,尤其是工具栏部分:(数据变量中的JSON文本的一部分)

   ..."toolbar":{"command":[{"name":null,"buttonType":"ImageAndText","text":"Add new role"}]}...

请注意“name”属性的null值。值应为“创建”。 因此,恢复数据将破坏工具栏。

我花了很多时间在公共javascript版本中重现这一点,但是 使用纯Html / Javascript版本无法重现此问题,因为它使用默认工具栏定义,如下所示:

 ...,
 toolbar: ["create"],
 ...

它将在数据中序列化为:

 "toolbar":["create"]

这与我们在ASP MVC案例中看到的方式不同,而且是正确的。 此外,如果我们在Html / javascript中明确设置命令的名称,如:

  ...,
  toolbar: [{name: "create", text: "Add new Customer"}],
  ...

它将被序列化为:

 "toolbar":[{"name":"create","text":"Add new Customer",

这是正确的,与我们在ASP MVC版本中看到的不同。

明显的解决方法是在ASP MVC中明确设置命令名称,但不幸的是ASP MVC帮助程序不公开此属性...

知道要修补什么或如何解决方法?

1 个答案:

答案 0 :(得分:1)

AFAIK HtmlAttributes使它成为可能, 但当你使用grid.getOptions时,json结果不会像你期望的那样。因为getOptions将返回网格定义而不是网格呈现的方式。

试试这个

.ToolBar(toolbar => toolbar.Create()
                           .Text("Add new role")
                           .HtmlAttributes(new {name = "create" }))

JSON字符串将是这样的

 ..."toolbar":{"command":[{"name":null, "attr" : "\"name\" = \"create\"", "buttonType":"ImageAndText","text":"Add new role"}]}...

您可以使用字符串replace对其进行一些修改,使其符合您的预期