来自 ClientTemplate 的列未定义

Column from ClientTemplate undefined

我有一个 Kendo 网格列 List,它是一个字符串列表和一个遍历它并使用简单模板的 JS 函数。发生的情况是,如果我单击工具栏上的按钮,则会出现错误:List 未定义。但是该列与按钮无关,它们没有任何联系。

Kendo 列 + 按钮

//..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; }

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

当您点击添加按钮时,网格会根据您给它的定义设置您的新模型。因此,如果您尚未定义 属性,那么如果它不是 standard 属性,则默认情况下它将为 null(来自内存),例如字符串、数字、日期时间等

因此,当您单击“添加”时,它会尝试将模板应用到列表 属性,如果您没有为其指定默认值。例如。 new 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 框架。

有任何问题请告诉我,我会相应地更新我的答案。