【问题标题】:Kendo UI MVC Send MultiSelect data values to Action methodKendo UI MVC 将 MultiSelect 数据值发送到 Action 方法
【发布时间】:2013-03-29 22:01:03
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我的解决方案不使用 Ajax,而是描述了将多选值传输到 Controller 的一般方式! Ajaxify 吧,模型传输应该也是一样的!

    .cshtml 过滤视图: 带有选择字段的表单,用于将选择的值发布到控制器。 Model.ProductsProduct 类型的 List,具有 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 填充列表

    【讨论】:

    • 弗洛里安 - 谢谢。通过将多选数据值转换为字符串解决了我的问题。
    • "在控制器操作 .jpeg 中接收到 POST 数据:"这应该是图像吗?您能展示一下您发布数据的方式吗?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 2015-08-27
      • 1970-01-01
      相关资源
      最近更新 更多