Kendo Multiselect data.length在模板中未定义

时间:2017-07-24 18:46:52

标签: templates telerik kendo-multiselect

这很简单,我有一个Multiselect,当选择一个项目时,我希望标签代表DataTextField。选择多个项目时,我希望一个标签代表所选项目的数量。这是我的代码:

@(Html.Kendo().MultiSelect()
      .Placeholder("Select Employees...")
      .Name("empSelect")
      .DataTextField("Employee")
      .DataValueField("PERSONNEL_KEY")
      .HtmlAttributes(new { style = "width:100%;font-size:10px;", id = "empSelect" })
      .AutoBind(false)
      .AutoClose(false)
      .Filter(FilterType.Contains)
      .TagTemplateId("tagTemplate")
      .DataSource(source => {
            source.Read(read =>
            {
                 read.Action("GetEmployees", "EmployeeTS");
            })
      .ServerFiltering(true);}))

这是tagTemplate脚本:

<script id="tagTemplate" type="text/x-kendo-template">
# if (data.length < 2) { #
    <span>
        #= data.Employee #
    </span>
# } else { #
    <span>
        #= data.length # selected
    </span>
# } #

所有物品都从我的控制器回来就好了。当我选择一个项目时,标签显示“未选择已选择”。显然“data.length”是未定义的,但我知道没有其他办法可以获取所选项目的数量。

我目前正在使用Telerik Kendo MVC的2016.3.1118版本。

1 个答案:

答案 0 :(得分:0)

&#34;数据&#34;不具有长度属性。因此,总是有效的&#34;否则&#34;并显示未定义。

<script>
function onChange(e) {
    var multi = $("#empSelect").data("kendoMultiSelect");

     var multi = $("#empSelect").data("kendoMultiSelect");

    if (multi.listView._dataItems.length > 1) {

        multi.setOptions({
            tagMode: 'single'
        });
    } else {
        multi.setOptions({
            tagMode: 'multiple'
        });
    }

    multi.refresh();
}

@(Html.Kendo().MultiSelect()
  .Placeholder("Select Employees...")
  .Name("empSelect")
  .DataTextField("TANIM")
  .DataValueField("URETIM_YERI")
  .AutoBind(false)
  .AutoClose(false)
  .Filter(FilterType.Contains)
  .TagMode(TagMode.Multiple)
  .Events(e =>
        {
            e.Change("onChange");
        })
  .DataSource(source =>
  {
      source.Read(read =>
      {
          read.Action("GetFactories", "Factory");
      })
.ServerFiltering(true);
  }))