Ajax Binding上的Kendo UI Ajax绑定文档描述了将多个数据参数传递给Action方法,但它没有解决传递MultiSelect值等数组的问题。
在下面的示例中,如果multisel设置为类似“237896”的字符串,则控制器接收sitesFilter =“237896”。但如果multisel设置为MultiSelect值,如下所示,则控制器接收sitesFilter = null。
使用MVC包装器将所有MultiSelect值发送到Action方法的正确方法是什么?
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Read(read => read.Action("Documents_Read", "Document")
.Type(HttpVerbs.Post)
.Data("getCriteria"))
function getCriteria() {
var multisel = $("#sites").data("kendoMultiSelect").value();
return {
sitesFilter: multisel
};
}
public ActionResult Documents_Read([DataSourceRequest] DataSourceRequest request, string sitesFilter=null)
{
return Json(GetDocuments(sitesFilter).ToDataSourceResult(request), JsonRequestBehavior.DenyGet);
}
编辑:getCriteria应该将数据转换为字符串,如下所示:
function getCriteria() {
var multisel = $("#sites").data("kendoMultiSelect").value().toString();
return {
sitesFilter: multisel
};
答案 0 :(得分:3)
我的解决方案不使用Ajax,但一般描述了多选值传输到Controller! Ajax化它,模型传输应该类似的工作!
.cshtml过滤视图:表单,其中包含用于将所选值POST到Controller的选择字段。 Model.Products 是产品的列表,其属性为 ID 和 DisplayName 。
<div class="editor-field">
@{
IEnumerable<Product> productSelectList = Model.Products;
Html.Kendo().MultiSelectFor(model => model.ProductIds)
.BindTo(new SelectList(productSelectList, "ID", "DisplayName"))
.HtmlAttributes(new { style = "width: 400px;" })
.Render();
}
</div>
Controller.cs:操作
[HttpPost]
public ActionResult SearchForLicenseTerm(SearchLicenseTermFilterViewModel searchLicenseTermFilterViewModel)
{
// Search logic
}
Model.cs:使用的特定模型
public class SearchLicenseTermFilterViewModel
{
public SearchLicenseTermFilterViewModel()
{
ProductIds = new List<Guid?>();
}
public List<Guid?> ProductIds { get; set; }
}
在Controller Action .jpeg中收到POST数据:您正在看到Kendo.MultiSelect中选择条目的GUID填充列表
答案 1 :(得分:2)
var multisel = $(“#sites”)。data(“kendoMultiSelect”)。value();没有被转换为字符串。
var multisel = $(“#sites”)。data(“kendoMultiSelect”)。value()。toString();解决了这个问题。