【问题标题】:Post additional data as list kendo multiselect read将附加数据发布为列表剑道多选读取
【发布时间】:2015-05-10 08:00:52
【问题描述】:

我有两个剑道多选,我希望我的角色多选与另一个角色级联排序,在角色多选读取我想发布在我的系统多选中选择的值的列表。这就是我的角色多选的样子:

 @(Html.Kendo().MultiSelect()
              .Name("Roles")
                .DataTextField("Name")
                .DataValueField("Id")
              .Placeholder("Select roles")
              .DataSource(source =>
              {
                  source.Read(read =>
                  {
                      read.Action("GetRoles", "UserAdmin").Data("additionalItemsGetRoles");
                  })
                  .ServerFiltering(true);
              })
             )


<script>
 function additionalItemsGetRoles() {
    var multiselect = $("#Systems").data("kendoMultiSelect").dataItems();
    var length = multiselect.length;
    var systems = [];
    for (var i = 0; i < length; i++) {
        systems.push({
            Name: multiselect[i].Name,
            SystemId: multiselect[i].SystemId,
            Description: multiselect[i].Description
        });
    }
    var json = JSON.stringify(systems);
    console.log(json);
    return json;
}
</script>

这是我的操作方法的样子:

       public ActionResult GetRoles([DataSourceRequest] DataSourceRequest request, IList<SystemViewModel> systems)
    {

这是我的 console.log(json) 在控制台中显示的内容。

这是我的视图模型:

   public string SystemId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }

我尝试将操作方法​​设置为 [httpPost],但它根本找不到该方法。

每次它发布到控制器时它都会为空。我在这里做错了什么?

【问题讨论】:

    标签: json post kendo-ui kendo-asp.net-mvc multi-select


    【解决方案1】:

    好的,如果我理解正确,您要做的是根据另一个多选列表中的选定项目过滤一个多选列表。是吗?

    我实际上正在做类似的事情,这就是我所做的:

    首先,设置两个 MultiSelect “小部件” 在第一个 MultiSelect ("regionChange") 上设置 Change 事件 将DataSource的.Data参数设置为js函数(“regionfilter”)

    @(Html.Kendo().MultiSelect()
        .Name("region")
        .DataTextField("Name")
        .DataValueField("Id")
        .AutoBind(false)
        .Events(e => e.Change("regionChange"))
        .DataSource(ds => ds
            .Read(read => read.Action("GetRegionsForFilter", "Authorization")
        )
    )
    
    @(Html.Kendo().MultiSelect()
        .Name("branch")
        .DataTextField("Name")
        .DataValueField("Id")
        .AutoBind(false)
        .DataSource(ds => ds
            .Read(read => read.Action("GetBranchesForFilter", "Authorization")
            .Data("regionfilter"))
            .ServerFiltering(true)
        )
    )
    

    定义 js 函数(我有一个额外的函数来获取 MultiSelect 值,因为我在其他几个 MultiSelect“小部件”上使用它而不是页面,并且我实际上正在为一些(例如 Branch/区域虽然我剪掉了对区域进行的过滤)

    function regionChange() {
        var value = this.value(),
            grid = $("#grid").data("kendoGrid");
    
        <-- snipped logic related to filtering grid -->
    
        $('#branch').data('kendoMultiSelect').dataSource.read();
    }
    
    function regionfilter() {
        var values = getMultiSelectValues("region");
        return { regions: values.toString() };
    }
    
    function getMultiSelectValues(multiSelectControl) {
        var multiSelect = $("#" + multiSelectControl).data("kendoMultiSelect");
        var values = multiSelect.value($("#value").val());
        return values;
    }
    

    最后,在我的控制器中,我只返回一个接受字符串参数(逗号分隔的字符串列表)的 JsonResult(获取请求)

    public JsonResult GetBranchesForFilter(string regions)
    {
        var list = _repository.Branches().GetAll().Select(x => new { x.Id, x.Name, x.RegionId });
        if (!String.IsNullOrWhiteSpace(regions))
            list = list.Where(x => regions.Contains(x.RegionId.ToString()));
    
        return Json(list.OrderBy(o => o.Name), JsonRequestBehavior.AllowGet);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多