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

时间:2019-07-18 18:40:39

标签: javascript json asp.net-core kendo-ui kendo-asp.net-mvc

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

控制器:

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>()) ) 触发此javascript:

onAdd

已验证JSON字符串有效: enter image description here 使用: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"); }

它触发console.log(JSON.stringify({ selectedItems: e.dataItems }))方法UpdateCaps,但没有结果: enter image description here

1 个答案:

答案 0 :(得分:1)

修改以下代码行:

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

JSON.stringify(e.dataItems),

问题是您正在将包含名为selectedItems的属性(包含一个对象列表)的对象发送回控制器。您必须改为通过列表。

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

创建以下类:

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

并更新您的代码以获取MyModel的列表:

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