Kendo UI MVC将MultiSelect数据值发送到Action方法

时间:2013-03-29 22:01:04

标签: kendo-ui kendo-grid kendo-asp.net-mvc

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
        };

2 个答案:

答案 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填充列表

enter image description here

答案 1 :(得分:2)

var multisel = $(“#sites”)。data(“kendoMultiSelect”)。value();没有被转换为字符串。

var multisel = $(“#sites”)。data(“kendoMultiSelect”)。value()。toString();解决了这个问题。

相关问题