ClientTemplate中的列未定义

时间:2017-08-10 12:34:22

标签: javascript kendo-asp.net-mvc

我有一个KendoGrid列List,它是一个字符串列表和一个JS函数,它遍历它并使用一个简单的模板。如果我单击工具栏上的按钮,会出现错误:List未定义。但该列与按钮无关,它们没有任何连接方式。

Kendo Column + Button

//..rest of the grid
columns.Bound(od => od.List).Width(150).ClientTemplate("#=generateTemplate(List)#");
.ToolBar(toolbar => toolbar.Create().Text("Add"))
....

我的Js功能

  function generateTemplate(List) {
     var template = "<ul>";
     for (var i = 0; i < List.length; i++) {
     template = template + "<li>" + List[i] + "</li>";
      }
     return template + "</ul>";
   }

我的模特

   [Display(Name ="List")]
    public List<string> List { get; set; }

1 个答案:

答案 0 :(得分:0)

问题是list属性的initialisation中的一个简单问题。

当您单击添加按钮时,网格将根据您提供的定义设置新模型。因此,如果您还没有定义该属性,那么如果它不是standard属性,则它默认为null(来自内存)。字符串,数字,日期时间等。

因此,当您单击添加时,它会尝试将模板应用于列表属性,如果您还没有给出默认值。例如。新的List然后该值将为null,因为您没有检查您的javascript函数来测试列表是null还是undefined,它会爆炸错误。

所以我建议在你的js中应用一个空值列表检查,如下所示:

function generateTemplate(List) {
  var template = "<ul>";
  if (list === null || list === undefined) {
    template = template + "<li>N/A</li>";
  } else {
    for (var i = 0; i < List.length; i++) {
      template = template + "<li>" + List[i] + "</li>";
    }
  }
  return template + "</ul>";
}

作为附注,虽然您已经说过按钮和列没有连接,但它们是由于网格在初始化模型并将其绑定到当前行时使用的MVVM框架。

任何问题都让我知道,我会相应地更新我的答案。