2017-07-24 102 views
0

這很簡單,我有一個Multiselect,當選擇一個項目時,我希望標籤代表DataTextField。當選擇多個項目時,我想要一個標籤來表示所選項目的數量。這裏是我的代碼:Kendo Multiselect data.length在模板中未定義

@(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> 
# } # 

所有項目來自我的控制器回來就好了。當我選擇一個或多個項目時,標籤顯示「UNDEFINED selected」。顯然「data.length」是未定義的,但我知道沒有其他方法來獲取所選項目的數量。

我目前在Telerik Kendo MVC的2016.3.1118版本中。

回答

0

「數據」不具有長度屬性。因此,總是工作「其他」,並顯示未定義。

<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); 
    })) 
+0

感謝您的響應。那麼我如何獲取所選項目的數量呢? – user2777664

+0

如果你不想在第一次選擇後顯示項目文本,你可以添加「.TagMode(TagMode.Single)」並移除「.TagTemplateId(」tagTemplate「)」 –

+0

我知道,但TagMode Single show的「1選擇1項目時選擇的項目「。我希望它在顯示DataTextField(在這種情況下爲Employee)時選擇1個項目。當選擇多個項目時,我希望它顯示「{X}個項目被選中」 – user2777664