JSON 没有通过 JQuery 传递给控制器

JSON not getting passed to controller via JQuery

我似乎无法将 json(已验证有效)从 ListBox 获取到 UpdateCaps 控制器:

控制器:

public IActionResult UpdateCaps(List<SelectListItem> selectedItems)
{
    var test = selectedItems;
    return Json(test);
}

列表框:

   @(Html.Kendo().ListBox()
        .Name("selected")
        .ConnectWith("optional")
        .Selectable(ListBoxSelectable.Multiple)
        .DropSources("optional")
        .DataTextField("Description")
        .DataValueField("Id")
        .Toolbar(toolbar =>
        {
            toolbar.Position(ListBoxToolbarPosition.Right);
        })
        .DataSource(source => source
            .Custom()
            .Type("aspnetmvc-ajax")
            .Transport(transport => transport
                .Read(read => read.Action("GetSelectedCapsUnits", "OrgStructure").Data("level1Select"))
            )
        )
        .Events(events => events
            .Add("onAdd")
            .Remove("onRemove")
        )
        .BindTo(new List<SelectListItem>())
    )

列表框中的onAdd触发这个javascript:

function onAdd(e) {
    console.log(e.dataItems);
    console.log(JSON.stringify({ selectedItems: e.dataItems }))
    $.ajax({
         type: "POST",
         url: "/OrgStructure/UpdateCaps",
         contentType: "application/json; charset=utf-8",
         data: JSON.stringify({ selectedItems: e.dataItems }),
         dataType: "json",
         success: function (result) {
          alert("Successfully sent to server: " + result.map(function (x) {
                 return x.Text
             }))
         }
     });

    $('#selectedListBox').text(' ' + e.dataItems.length + " added - saved");  

}

已验证 JSON 字符串是否有效: 随着:console.log(JSON.stringify({ selectedItems: e.dataItems }))

它触发了 UpdateCaps 方法 onAdd 但没有结果:

修改这行代码:

JSON.stringify({ selectedItems: e.dataItems }),

JSON.stringify(e.dataItems),

问题是您正在向控制器发回一个对象,该对象包含一个名为 selectedItems 的 属性,其中包含一个对象列表。您必须改为传递列表。

根据您的评论,您不需要 List<SelectListItem> 作为参数。

创建以下 class:

public class MyModel
{
    public int Id { get; set; }
    public string Description { get; set; }
}

并更新您的代码以期待 MyModel:

的列表
public IActionResult UpdateCaps([FromBody]List<MyModel> models)