title: Using Kendo-UI grid for asp.net MVC, with multi-checkbox filtering, how do I configure data source for limiting options returned by the server?
body: <p>I'm working with a Kendo-UI grid for asp.net MVC (version 2022.2.621.545) and I added multi-checkbox filtering to the columns.  The grid items are pulled from the server using a configured ajax call to a controller action, and clicking on a filter button triggers another call to retrieve the full set of items in order to build the checkbox list.  In some cases there are too many items returned and the grid appears to hang trying to determine the unique items for the checkbox list.</p>
  <p>I was wondering if lazy loading can be configured for multi-checkbox filtering such that paging info is sent to the data source controller action.  Alternatively, I've read that there may be a way to hold off on retrieving items for the filter until a minimal search string has been entered, with the search string being sent to the data source controller action.</p>
  <p>I've looked at Kendo-UI documentation for multi-checkbox filtering options, but nothing has been abundantly clear that what I need to do is possible, especially within the asp.net MVC directives.  I'm hoping someone can provide some guidance as to how to modify my grid setup to configure additional control for retrieving filter options.  This is my current working code:</p>
  <pre><code>   &lt;div style=&quot;height:690px&quot; id=&quot;warehouseGrid&quot;&gt;
          @(Html.Kendo().Grid&lt;WarehouseModel&gt;()
              .Name(&quot;inventoryGrid&quot;)
              .HtmlAttributes(new { style = &quot;height:100%; width: 100%;&quot; })
              .Columns(columns =&gt;
              {
                  columns.Bound(&quot;InventoryLineItemID&quot;).Title(&quot;&quot;).Width(35).Filterable(false).ClientTemplate(
                      &quot;&lt;img src='https://cdn.host/show_detail.png' class='k-icon k-delete' height='45' width='45' onclick='ShowInventoryItemDetails(\&quot;#= InventoryLineItemID #\&quot;)' onmouseover='' style='cursor: pointer;' title='Show Inventory Item Details' alt='Show Inventory Item Details' /&gt;&quot;
                  );
                  foreach (WarehouseField col in fields)
                  {
                      if (!string.IsNullOrEmpty(col.Template))
                      {
                          columns.Bound(col.PropertyName).Title(col.Title).Width(col.Width).Filterable(false).ClientTemplate(col.Template);
                      }
                      else
                      {
                          columns.Bound(col.PropertyName).Title(col.Title).Width(col.Width).Filterable(ftb =&gt; ftb.Multi(true).Search(true));
                      }
                  }
              })
              .Pageable(pager =&gt; pager.PageSizes(new[] { 10, 20, 50, 100 }))
              .Excel(excel =&gt; excel
                  .AllPages(true)
              )
              .ToolBar(
                  toolbar =&gt;
                  {
                      toolbar.Template(@&lt;text&gt;
                          @ToolbarTemplate()
                      &lt;/text&gt;);
                  }
              )
              .Events(e =&gt; e.DataBinding(@&lt;text&gt;function(e) { onDataBinding(this) }&lt;/text&gt;))
              .Events(e =&gt; e.DataBound(@&lt;text&gt;function(e) { onDataBound(this) }&lt;/text&gt;))
              .Resizable(r =&gt; r.Columns(true))
              .ColumnResizeHandleWidth(5)
              .Scrollable()
              .Sortable()
              .Filterable()
              .DataSource(dataSource =&gt; dataSource
                  .Ajax()
                  .PageSize(100)
                  .Read(read =&gt; read.Action(&quot;GetInventory&quot;, &quot;Warehouse&quot;, new { area = &quot;Rest&quot; }).Data(&quot;additionalData&quot;))
              )
          )
      &lt;/div&gt;
  </code></pre>