2015-10-28 67 views
0

我想在Kendo UI(ASP.NET 5,MVC6)中使用serverfiltering進行自動完成 由於Autocomplete在MVC Wrapper中不可用,所以我不得不使用下面的代碼:Kendo自動完成Querystring中的空過濾器 - serverfiltering

<script> 
    var dataSource = new kendo.data.DataSource({ 
     serverFiltering: true, 
     serverOperation: true, 
     type: "aspnetmvc-ajax", 
     transport: { 
      read: { 
       url: "@Url.Content("~/api/Get")", 
       type: "GET" 
      } 
     }, 
     schema: { 
      data: "Data", 
      total: "Total" 
     } 
    }) 

    $("#@Model.Name").kendoAutoComplete({ 
     placeholder: "@Model.Watermark", 
     minLength: 3, 
     filter: "contains", 
     dataSource: dataSource 

    }); 
</script> 

的問題是,查詢字符串發送到控制器看起來是這樣的: 排序= &組= &過濾器=

所以不包括任何過濾信息

在服務器端的即時通訊試圖將其映射到DataSourceRequest

+0

劍道自動完成可在MVC包裝...'@ Html.Kendo.AutoCompleteFor()'http://demos.telerik.com/aspnet-mvc/autocomplete/index –

+0

這是不可用爲MVC 6 re仍然有一些組件在Wrapper中丟失了MVC6 – Himself

+0

好的!對不起,沒有意識到這一點。你可以請你張貼你的控制器。 –

回答

1

現在即時通訊使用以下解決方法傳遞附加參數做serversidefiltering但我仍想使用這個劍道本地過濾:

<script> 
    var dataSource = new kendo.data.DataSource({ 
     serverFiltering: true, 
     serverOperation: true, 
     type: "aspnetmvc-ajax", 
     transport: { 
      read: { 
       url: "@Url.Content("~/api/Get")", 
       type: "GET", 
       data: onAdditionalData 
      } 
     }, 
     schema: { 
      data: "Data", 
      total: "Total" 
     } 
    }) 


    $("#@Model.Name").kendoAutoComplete({ 
     placeholder: "@Model.Watermark", 
     minLength: 3, 
     filter: "contains", 
     dataSource: dataSource 

    }); 

    function onAdditionalData() { 
     return { 
      text: $("#@Model.Name").val() 
     }; 
    } 
</script> 

控制器代碼:

[Route("api/Get")] 
    [HttpGet] 
    public JsonResult Get([DataSourceRequest] DataSourceRequest request, string text = "") 
    { 
     var list = (new List<string>() { "value1", "value2", "value3", "test" }).AsQueryable(); 
     return Json(list.Where(x => x.Contains(text)).ToDataSourceResult(request)); 
    }