New to Telerik UI for ASP.NET MVCStart a free 30-day trial

Virtualization

You can configure a MultiColumnComboBox to use virtualization.

  • For the virtualization to work properly, define the widths of all columns in pixels.
  • The MultiColumnComboBox supports server binding to primitive or an enum value types only.
  1. Create the Read and ValueMapper actions.

    Razor
     public ActionResult Index()
     {
         return View(new ProductViewModel
         {
             ProductID = 4,
             ProductName = "ProductName4"
         });
     }
    
     [HttpPost]
     public ActionResult ProductsVirtualization_Read([DataSourceRequest] DataSourceRequest request)
     {
         return Json(GetProducts().ToDataSourceResult(request));
     }
    
     public ActionResult Products_ValueMapper(int[] values)
     {
         var indices = new List<int>();
    
         if (values != null && values.Any())
         {
             var index = 0;
    
             foreach (var product in GetProducts())
             {
                 if (values.Contains(product.ProductID))
                 {
                     indices.Add(index);
                 }
    
                 index += 1;
             }
         }
    
         return Json(indices, JsonRequestBehavior.AllowGet);
     }
    
     private static IEnumerable<ProductViewModel> GetProducts()
     {
         var products = Enumerable.Range(0, 2000).Select(i => new ProductViewModel
         {
             ProductID = i,
             ProductName = "ProductName" + i
         });
    
         return products;
     }
     
  2. Add the MultiColumnComboBox to the view and configure it to use virtualization.

    Razor
        @model MvcApplication1.Models.ProductViewModel
    
        @(Html.Kendo().MultiColumnComboBoxFor(m => m.ProductID)
            .Filter("contains")
            .DataTextField("ProductName")
            .DataValueField("ProductID")
            .Height(560)
            .Columns(columns =>
            {
                columns.Add().Field("ProductName").Title("Product Name").Width("200px")
                columns.Add().Field("ProductID").Title("Product ID").Width("200px");
            })
            .Placeholder("Select product...")
            .DataSource(source =>
            {
                source.Custom()
                    .ServerFiltering(true)
                    .ServerPaging(true)
                    .PageSize(80)
                    .Type("aspnetmvc-ajax")
                    .Transport(transport =>
                    {
                        transport.Read("ProductsVirtualization_Read", "Home");
                    })
                    .Schema(schema =>
                    {
                        schema.Data("Data")
                                .Total("Total");
                    });
            })
            .Virtual(v => v.ItemHeight(26).ValueMapper("valueMapper"))

If the AutoBind option of the MultiColumnComboBox is set to false and you need the widget to display the model value as selected, set the Text configuration option by passing the field set as DataTextField to the Text option.

Razor
    @model MvcApplication1.Models.ProductViewModel

    @(Html.Kendo().MultiColumnComboBoxFor(m => m.ProductID)
        .AutoBind(false)
        .Text(Model.ProductName)
        .DataTextField("ProductName")
        // Additional configuration.
    )

See Also

In this article
See Also
Not finding the help you need?
Contact Support