【问题标题】:JSON not getting passed to controller via JQueryJSON 没有通过 JQuery 传递给控制器
【发布时间】:2019-07-18 18:40:39
【问题描述】:

我似乎无法从 ListBox 将 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>())
    )

列表框中的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(...)。本质上是尝试发送对象,而不是对象的字符串表示。
  • @DrewB。试过data: e.dataItems,,但还是Count = 0

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


【解决方案1】:

修改这行代码:

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

JSON.stringify(e.dataItems),

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

根据您的评论,您不需要 List&lt;SelectListItem&gt; 作为参数。

创建以下类:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 2014-05-21
    • 2019-11-28
    相关资源
    最近更新 更多