Asp.net mvc 剑道组合框服务器过滤器的技术问题

Asp.net mvc 剑道组合框服务器过滤器的技术问题,asp.net-mvc,kendo-ui,kendo-combobox,Asp.net Mvc,Kendo Ui,Kendo Combobox,我在MVC5应用程序中实现了带有级联特性的剑道组合框。我试图实现服务器过滤,但遇到了一个障碍 组合框显示连接为显示文本的客户编号和名称。我试图在用户键入几个字符时实现过滤。我这里有两个技术上的问题。第一个问题是如何将过滤器文本传递给控制器。我已经编写了一个javascript函数来返回过滤后的文本,但是已经将data属性设置为另一个名为GetSalesOfficeFilter的函数 我遇到的第二个问题是,过滤器位于视图模型的连接字段Name1和Customer Number上,而我编写的linq

我在MVC5应用程序中实现了带有级联特性的剑道组合框。我试图实现服务器过滤,但遇到了一个障碍

组合框显示连接为显示文本的客户编号和名称。我试图在用户键入几个字符时实现过滤。我这里有两个技术上的问题。第一个问题是如何将过滤器文本传递给控制器。我已经编写了一个javascript函数来返回过滤后的文本,但是已经将data属性设置为另一个名为GetSalesOfficeFilter的函数

我遇到的第二个问题是,过滤器位于视图模型的连接字段Name1和Customer Number上,而我编写的linq查询只能访问不包含连接字段的模型。我怎样才能让它工作

<div class="form-group">
                    @Html.LabelFor(model => model.Name1, htmlAttributes: new { @class = "control-label col-md-4" })

                    <div class="col-md-8">
                        <div class="editor-field">
                            @(Html.Kendo().ComboBoxFor(model => model.CustomerMasterDataId)

                     .HtmlAttributes(new { style = "width:100%" })
                    .DataTextField("CustomerNumberName")
                    .Placeholder("Select...")
                    .DataValueField("CustomerMasterDataId")
                    .Filter("contains")
                    .MinLength(3)
                    .DataSource(dataSource => dataSource
                          .Read(read =>
                          {
                              read.Action("RequestHeader_CustomerData", "Request")
                                  .Type(HttpVerbs.Post)
                                  .Data("GetSalesOfficeFilter");
                          }).ServerFiltering(true)
                                    ).CascadeFrom("CountryCode").Filter("contains")

                       .Events(e =>
                       {
                           e.Change("onCustomerComboChange");
                       })
                            )
                        </div>
                        @Html.ValidationMessageFor(model => model.Name1, "", new { @class = "text-danger" })
                    </div>
                </div>

您应该使用
Kendo Dinamic Linq
库进行服务器筛选。 但是为了正确的工作,你不能使用映射器或者其他可以实现你的查询的东西

下面是如何使用剑道的示例:

using Kendo.DynamicLinq;

public class EmployeesController : Controller {

  [HttpPost]
  public ActionResult Get(int take, int skip, IEnumerable<Kendo.DynamicLinq.Sort> sort, Kendo.DynamicLinq.Filter filter) {
    var employees = _context.Employees.OrderBy(e => e.Employee_ID)
      .OrderBy(e => e.Employee_ID)
      .Select(e => new Models.Employee {
        EmployeeID = e.Employee_ID,
        FirstName = e.First_Name,
        LastName = e.Last_Name,
        Title = e.Title,
        BirthDate = e.Birth_Date
    });

    return Json(employees.ToDataSourceResult(take, skip, sort, filter));
  }
}
使用Kendo.DynamicLinq;
公共类EmployeesController:控制器{
[HttpPost]
public ActionResult Get(int take、int skip、IEnumerable sort、Kendo.dynamicLink.Filter){
var employees=\u context.employees.OrderBy(e=>e.employees\u ID)
.OrderBy(e=>e.Employee_ID)
.选择(e=>new Models.Employee{
EmployeeID=e.Employee\u ID,
FirstName=e.First_Name,
LastName=e.Last_Name,
Title=e.Title,
出生日期=出生日期
});
返回Json(employees.ToDataSourceResult(take、skip、sort、filter));
}
}
退房

但是,如果您不能或不愿使用新库,还有另一种方法。 在将请求发送到服务器之前,您可以在客户端上解析过滤器,并只发送一个将在服务器上处理的参数

function GetSalesOfficeFilter() {

    return { id: $('#CountryCode').val() }
};


function onAdditionalData() {
        return {
            filter: $("#Name1").data("kendoComboBox").text()
        };
    }
using Kendo.DynamicLinq;

public class EmployeesController : Controller {

  [HttpPost]
  public ActionResult Get(int take, int skip, IEnumerable<Kendo.DynamicLinq.Sort> sort, Kendo.DynamicLinq.Filter filter) {
    var employees = _context.Employees.OrderBy(e => e.Employee_ID)
      .OrderBy(e => e.Employee_ID)
      .Select(e => new Models.Employee {
        EmployeeID = e.Employee_ID,
        FirstName = e.First_Name,
        LastName = e.Last_Name,
        Title = e.Title,
        BirthDate = e.Birth_Date
    });

    return Json(employees.ToDataSourceResult(take, skip, sort, filter));
  }
}