Asp.net mvc 剑道组合框服务器过滤器的技术问题
我在MVC5应用程序中实现了带有级联特性的剑道组合框。我试图实现服务器过滤,但遇到了一个障碍 组合框显示连接为显示文本的客户编号和名称。我试图在用户键入几个字符时实现过滤。我这里有两个技术上的问题。第一个问题是如何将过滤器文本传递给控制器。我已经编写了一个javascript函数来返回过滤后的文本,但是已经将data属性设置为另一个名为GetSalesOfficeFilter的函数 我遇到的第二个问题是,过滤器位于视图模型的连接字段Name1和Customer Number上,而我编写的linq查询只能访问不包含连接字段的模型。我怎样才能让它工作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
<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));
}
}