5

Ajax Binding 上的 Kendo UI Ajax Binding 文档描述了将多个数据参数传递给 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
        };
4

2 回答 2

3

我的解决方案没有使用 Ajax,而是描述了将多选值传输到 Controller 的一般方式!Ajaxify 它,模型传输应该同样工作!

.cshtml 过滤视图:带有选择字段的表单,用于将选择的值发布到控制器。Model.Products是具有属性IDDisplayName的类型产品列表

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

在控制器操作 .jpeg 中收到 POST 数据:您会看到 Kendo.MultiSelect 中选择条目的 GUID 填充列表

在此处输入图像描述

于 2013-04-04T12:33:59.207 回答
2

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

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

于 2013-04-08T14:14:28.093 回答