2017-09-12 98 views
0

我能夠使用js版本dojo autocomplate獲得工作版本,但我需要它使用MVC版本。我在控制器中添加DataSourceRequest如下建議,並改變了擺脫了JS錯誤我得到的一對夫婦更多的項目:kendo-ui mvc自動完成不顯示結果

//Fixed, added the schema definition 
    Uncaught TypeError: e.slice is not a function 

這似乎是工作,我跟蹤它通過控制器,它返回預期的JSON (下圖),但是當旋轉器掛起並且結果不顯示時,它不會完成接線。

{ 
    "Data": [{ 
    "EmployeeId": 2147483649, 
    "EmployeeName": "Emily F Johnston", 
    "Rating": 75.0, 
    "LastAudited": null 
    }, { 
    "EmployeeId": 2147483687, 
    "EmployeeName": "Joshua Smith", 
    "Rating": 80.2, 
    "LastAudited": null 
    }, { 
    "EmployeeId": 2147483656, 
    "EmployeeName": "Thomas F Dunn", 
    "Rating": 45.0, 
    "LastAudited": "\/Date(1463893200000)\/" 
    }, { 
    "EmployeeId": 2147483660, 
    "EmployeeName": "Marjon Christine Marik", 
    "Rating": 88.0, 
    "LastAudited": null 
    }], 
    "Total": 4, 
    "AggregateResults": null, 
    "Errors": null 
} 

控制器:

 [HttpPost] 
    public ActionResult EmployeeLookup(string text, [DataSourceRequest] DataSourceRequest request) 
    { 
     var filter = request?.Filters.FirstOrDefault() as FilterDescriptor; 
     var search = string.Empty; 
     if (filter != null) 
     { 
      search = filter.Value?.ToString() ?? string.Empty; 
     } 
     var employees = new List<EmployeeLookupResultEntryViewModel>(); 
     var results = _employeeService.EmployeeLookup(search); 

     if (results == null) 
      return Json(employees.ToDataSourceResult(request)); 

     return Json(results.ToDataSourceResult(request)); 
    } 

自動完成定義:

另外,我發現這個DOCO從Telerik的,看起來非常相似,我的使用情況Telerik Custom Template但缺乏展示,以便控制方法我無法驗證他們是如何連線的。

@(Html.Kendo().AutoComplete() 
       .Name("Employees") 
       .DataTextField("EmployeeName") 
       .Placeholder("Search Employee") 
       .Filter("contains") 
       .IgnoreCase(true) 
       .MinLength(3) 
       .Delay(300) 
       .HighlightFirst(true) 
       .HtmlAttributes(new { style = "width:100%" }) 
       .NoDataTemplate("Employee Not Found") 
       .DataSource(dataSource => 
       { 
        dataSource.Custom() 
          .ServerFiltering(true) 
          .Type("aspnetmvc-ajax") 
          .Transport(transport => 
          { 
           transport.Read("EmployeeLookup", "Employee", new {area = "Client"}); 
          }) 
          .Schema(schema => {schema.Data("Data");}); 
        }) 
        .HeaderTemplate("<div style=\"width: 400px;\" class=\"dropdown-header k-widget k-header\">" + 
           "<span>Id</span>" + 
           "<span>Name</span>" + 
           "<span>Pwc Rating" + 
            "<span>Last Audited</span>" + 
        "</div>") 
       .Template("<span style=\"width: 50px;\">#: data.EmployeeId #</span><span class=\"cell\">#: data.EmployeeName #</span><span class=\"cell\">#: data.PwcRating #</span><span class=\"cell\">#: data.LastAudited #</span>") 
     ) 

我似乎缺少在HTML中,某些配置設置,因爲JSON/datasouce被返回,類似於什麼文檔狀態...但小部件不能連線起來。

回答

1

已啓用服務器的過濾,這是顯著複雜得多,你已經實現

如果您打算啓用此功能有你需要做的

  1. 加入劍道ASP.NET三件事MVC庫項目
  2. 更改您的數據源類型爲aspnetmvc阿賈克斯:
  3. 返修您的行動,每本example您的控制器使用DataSourceRequest。 的DataSourceRequest屬性是不可選的

    public ActionResult Products_Read([DataSourceRequest] DataSourceRequest request) 
    { 
        return Json(productService.Read().ToDataSourceResult(request)); 
    } 
    
+0

感謝您的答覆。我發現了一個看起來像我之後的telerik鏈接,但他們沒有提供我需要驗證他們如何連接查找的控制器。我刪除了服務器端的過濾配置,但這還不夠。我會盡力實施你的建議。 –

+0

我實現了DataSourceRequest,我可以看到過濾器值經過並且響應如預期的那樣,微調控制器永遠不會停止,並且不會顯示建議值(也沒有js錯誤)。 –