我似乎无法从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字符串有效:
使用: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
,但没有结果:
答案 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)