2017-09-12 54 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错误)。 –